Skip to content

Commit 1d26ec1

Browse files
authored
Merge pull request #125 from nymtech/feature/provider-refactoring
Feature/provider refactoring
2 parents 6606ba7 + 4992498 commit 1d26ec1

File tree

36 files changed

+1082
-945
lines changed

36 files changed

+1082
-945
lines changed

Cargo.lock

+220-157
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

common/clients/directory-client/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ serde = { version = "1.0.104", features = ["derive"] }
1616
topology = {path = "../../topology"}
1717

1818
[dev-dependencies]
19-
mockito = "0.22.0"
19+
mockito = "0.23.0"

common/clients/mix-client/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,6 @@ addressing = {path = "../../addressing"}
1818
topology = {path = "../../topology"}
1919

2020
## will be moved to proper dependencies once released
21-
sphinx = { git = "https://github.com/nymtech/sphinx", rev="4e51ed38a5de6fcb454c8903f1fe5e6b52720c77" }
21+
sphinx = { git = "https://github.com/nymtech/sphinx", rev="23f9c89b257ee0936e70afd682e9ed6a62e89eee" }
2222
# sphinx = { path = "../../../../sphinx"}
2323

common/clients/provider-client/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ tokio = { version = "0.2", features = ["full"] }
1616
sfw-provider-requests = { path = "../../../sfw-provider/sfw-provider-requests" }
1717

1818
## will be moved to proper dependencies once released
19-
sphinx = { git = "https://github.com/nymtech/sphinx", rev="4e51ed38a5de6fcb454c8903f1fe5e6b52720c77" }
19+
sphinx = { git = "https://github.com/nymtech/sphinx", rev="23f9c89b257ee0936e70afd682e9ed6a62e89eee" }

common/clients/provider-client/src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ impl ProviderClient {
8989
}
9090
};
9191

92-
let pull_request = PullRequest::new(self.our_address, auth_token);
92+
let pull_request = PullRequest::new(self.our_address.clone(), auth_token);
9393
let bytes = pull_request.to_bytes();
9494

9595
let response = self.send_request(bytes).await?;
@@ -103,7 +103,7 @@ impl ProviderClient {
103103
return Err(ProviderClientError::ClientAlreadyRegisteredError);
104104
}
105105

106-
let register_request = RegisterRequest::new(self.our_address);
106+
let register_request = RegisterRequest::new(self.our_address.clone());
107107
let bytes = register_request.to_bytes();
108108

109109
let response = self.send_request(bytes).await?;

common/crypto/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ rand = "0.7.2"
1515
rand_os = "0.1"
1616

1717
## will be moved to proper dependencies once released
18-
sphinx = { git = "https://github.com/nymtech/sphinx", rev="4e51ed38a5de6fcb454c8903f1fe5e6b52720c77" }
18+
sphinx = { git = "https://github.com/nymtech/sphinx", rev="23f9c89b257ee0936e70afd682e9ed6a62e89eee" }

common/crypto/src/identity/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ impl MixIdentityPublicKey {
6868
let public_key_bytes = self.to_bytes();
6969
temporary_address.copy_from_slice(&public_key_bytes[..]);
7070

71-
temporary_address
71+
DestinationAddressBytes::from_bytes(temporary_address)
7272
}
7373

7474
pub fn to_bytes(&self) -> Vec<u8> {

common/healthcheck/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ sfw-provider-requests = { path = "../../sfw-provider/sfw-provider-requests" }
2727
topology = {path = "../topology" }
2828

2929
## will be moved to proper dependencies once released
30-
sphinx = { git = "https://github.com/nymtech/sphinx", rev="4e51ed38a5de6fcb454c8903f1fe5e6b52720c77" }
30+
sphinx = { git = "https://github.com/nymtech/sphinx", rev="23f9c89b257ee0936e70afd682e9ed6a62e89eee" }
3131
# sphinx = { path = "../../../sphinx"}
3232

3333
[dev-dependencies]

common/healthcheck/src/path_check.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ impl PathChecker {
3737
let address = identity_keys.public_key().derive_address();
3838

3939
for provider in providers {
40-
let mut provider_client = ProviderClient::new(provider.client_listener, address, None);
40+
let mut provider_client =
41+
ProviderClient::new(provider.client_listener, address.clone(), None);
4142
let insertion_result = match provider_client.register().await {
4243
Ok(token) => {
4344
debug!("registered at provider {}", provider.pub_key);

common/topology/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,5 @@ addressing = {path = "../addressing"}
1919
version-checker = {path = "../version-checker" }
2020

2121
## will be moved to proper dependencies once released
22-
sphinx = { git = "https://github.com/nymtech/sphinx", rev="4e51ed38a5de6fcb454c8903f1fe5e6b52720c77" }
22+
sphinx = { git = "https://github.com/nymtech/sphinx", rev="23f9c89b257ee0936e70afd682e9ed6a62e89eee" }
2323
# sphinx = { path = "../../../sphinx"}

mixnode/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ multi-tcp-client = { path = "../common/clients/multi-tcp-client" }
2828
pemstore = {path = "../common/pemstore"}
2929

3030
## will be moved to proper dependencies once released
31-
sphinx = { git = "https://github.com/nymtech/sphinx", rev="4e51ed38a5de6fcb454c8903f1fe5e6b52720c77" }
31+
sphinx = { git = "https://github.com/nymtech/sphinx", rev="23f9c89b257ee0936e70afd682e9ed6a62e89eee" }
3232

3333
[build-dependencies]
3434
built = "0.3.2"

mixnode/src/node/metrics.rs

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ pub(crate) enum MetricEvent {
1717
}
1818

1919
#[derive(Debug, Clone)]
20+
// Note: you should NEVER create more than a single instance of this using 'new()'.
21+
// You should always use .clone() to create additional instances
2022
struct MixMetrics {
2123
inner: Arc<Mutex<MixMetricsInner>>,
2224
}

mixnode/src/node/mod.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ impl MixNode {
4343
}
4444
}
4545

46-
pub fn start_presence_notifier(&self) {
46+
fn start_presence_notifier(&self) {
4747
info!("Starting presence notifier...");
4848
let notifier_config = presence::NotifierConfig::new(
4949
self.config.get_presence_directory_server(),
@@ -55,7 +55,7 @@ impl MixNode {
5555
presence::Notifier::new(notifier_config).start(self.runtime.handle());
5656
}
5757

58-
pub fn start_metrics_reporter(&self) -> metrics::MetricsReporter {
58+
fn start_metrics_reporter(&self) -> metrics::MetricsReporter {
5959
info!("Starting metrics reporter...");
6060
metrics::MetricsController::new(
6161
self.config.get_metrics_directory_server(),
@@ -65,7 +65,7 @@ impl MixNode {
6565
.start(self.runtime.handle())
6666
}
6767

68-
pub fn start_socket_listener(
68+
fn start_socket_listener(
6969
&self,
7070
metrics_reporter: metrics::MetricsReporter,
7171
forwarding_channel: mpsc::UnboundedSender<(SocketAddr, Vec<u8>)>,
@@ -84,7 +84,7 @@ impl MixNode {
8484
);
8585
}
8686

87-
pub fn start_packet_forwarder(&mut self) -> mpsc::UnboundedSender<(SocketAddr, Vec<u8>)> {
87+
fn start_packet_forwarder(&mut self) -> mpsc::UnboundedSender<(SocketAddr, Vec<u8>)> {
8888
info!("Starting packet forwarder...");
8989

9090
// this can later be replaced with topology information

nym-client/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ sfw-provider-requests = { path = "../sfw-provider/sfw-provider-requests" }
4040
topology = {path = "../common/topology" }
4141

4242
## will be moved to proper dependencies once released
43-
sphinx = { git = "https://github.com/nymtech/sphinx", rev="4e51ed38a5de6fcb454c8903f1fe5e6b52720c77" }
43+
sphinx = { git = "https://github.com/nymtech/sphinx", rev="23f9c89b257ee0936e70afd682e9ed6a62e89eee" }
4444
# sphinx = { path = "../../sphinx"}
4545

4646
[build-dependencies]

nym-client/src/client/cover_traffic_stream.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ pub(crate) async fn start_loop_cover_traffic_stream<T: NymTopology>(
2929
};
3030

3131
let cover_message = match mix_client::packet::loop_cover_message(
32-
our_info.address,
32+
our_info.address.clone(),
3333
our_info.identifier,
3434
topology,
3535
average_packet_delay_duration,

nym-client/src/client/mod.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ impl NymClient {
119119
let mut provider_poller = provider_poller::ProviderPoller::new(
120120
poller_input_tx,
121121
provider_client_listener_address,
122-
self_address,
122+
self_address.clone(),
123123
self.config
124124
.get_provider_auth_token()
125125
.map(|str_token| AuthToken::try_from_base58_string(str_token).ok())
@@ -149,7 +149,7 @@ impl NymClient {
149149
let loop_cover_traffic_future =
150150
rt.spawn(cover_traffic_stream::start_loop_cover_traffic_stream(
151151
mix_tx.clone(),
152-
Destination::new(self_address, Default::default()),
152+
Destination::new(self_address.clone(), Default::default()),
153153
topology_controller.get_inner_ref(),
154154
self.config.get_loop_cover_traffic_average_delay(),
155155
self.config.get_average_packet_delay(),
@@ -160,7 +160,7 @@ impl NymClient {
160160
let topology_ref = topology_controller.get_inner_ref();
161161
let average_packet_delay = self.config.get_average_packet_delay();
162162
let message_sending_average_delay = self.config.get_message_sending_average_delay();
163-
163+
let self_address_clone = self_address.clone();
164164
// future constantly pumping traffic at some specified average rate
165165
// if a real message is available on 'input_rx' that might have been received from say
166166
// the websocket, the real message is used, otherwise a loop cover message is generated
@@ -169,7 +169,7 @@ impl NymClient {
169169
real_traffic_stream::OutQueueControl::new(
170170
mix_tx,
171171
input_rx,
172-
Destination::new(self_address, Default::default()),
172+
Destination::new(self_address_clone, Default::default()),
173173
topology_ref,
174174
average_packet_delay,
175175
message_sending_average_delay,

nym-client/src/client/real_traffic_stream.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ impl<T: NymTopology> OutQueueControl<T> {
102102

103103
let next_packet = match next_message {
104104
StreamMessage::Cover => mix_client::packet::loop_cover_message(
105-
self.our_info.address,
105+
self.our_info.address.clone(),
106106
self.our_info.identifier,
107107
topology,
108108
self.average_packet_delay,

nym-client/src/commands/init.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,11 @@ async fn try_provider_registrations(
4949
) -> Option<(String, AuthToken)> {
5050
// since the order of providers is non-deterministic we can just try to get a first 'working' provider
5151
for provider in providers {
52-
let provider_client =
53-
provider_client::ProviderClient::new(provider.client_listener, our_address, None);
52+
let provider_client = provider_client::ProviderClient::new(
53+
provider.client_listener,
54+
our_address.clone(),
55+
None,
56+
);
5457
let auth_token = provider_client.register().await;
5558
if let Ok(token) = auth_token {
5659
return Some((provider.pub_key, token));

nym-client/src/sockets/tcp.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ fn parse_send_request(data: &[u8]) -> Result<ClientRequest, TCPSocketError> {
8484

8585
Ok(ClientRequest::Send {
8686
message,
87-
recipient_address,
87+
recipient_address: DestinationAddressBytes::from_bytes(recipient_address),
8888
})
8989
}
9090

@@ -153,7 +153,7 @@ impl ClientRequest {
153153

154154
async fn handle_own_details(self_address_bytes: DestinationAddressBytes) -> ServerResponse {
155155
ServerResponse::OwnDetails {
156-
address: self_address_bytes.to_vec(),
156+
address: self_address_bytes.to_bytes().to_vec(),
157157
}
158158
}
159159
}
@@ -274,7 +274,7 @@ async fn accept_connection<T: 'static + NymTopology>(
274274
topology: topology.clone(),
275275
msg_input: msg_input.clone(),
276276
msg_query: msg_query.clone(),
277-
self_address,
277+
self_address: self_address.clone(),
278278
};
279279
match handle_connection(&buf[..n], request_handling_data).await {
280280
Ok(res) => res,
@@ -313,7 +313,7 @@ pub async fn start_tcpsocket<T: 'static + NymTopology>(
313313
stream,
314314
message_tx.clone(),
315315
received_messages_query_tx.clone(),
316-
self_address,
316+
self_address.clone(),
317317
topology.clone(),
318318
));
319319
}

nym-client/src/sockets/ws.rs

+9-4
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,9 @@ impl<T: NymTopology> Connection<T> {
5050
}
5151
ClientRequest::Fetch => ClientRequest::handle_fetch(self.msg_query.clone()).await,
5252
ClientRequest::GetClients => ClientRequest::handle_get_clients(&self.topology).await,
53-
ClientRequest::OwnDetails => ClientRequest::handle_own_details(self.self_address).await,
53+
ClientRequest::OwnDetails => {
54+
ClientRequest::handle_own_details(self.self_address.clone()).await
55+
}
5456
}
5557
}
5658

@@ -218,7 +220,10 @@ impl ClientRequest {
218220

219221
let dummy_surb = [0; 16];
220222

221-
let input_msg = InputMessage(Destination::new(address, dummy_surb), message_bytes);
223+
let input_msg = InputMessage(
224+
Destination::new(DestinationAddressBytes::from_bytes(address), dummy_surb),
225+
message_bytes,
226+
);
222227
input_tx.send(input_msg).await.unwrap();
223228

224229
ServerResponse::Send
@@ -279,7 +284,7 @@ impl ClientRequest {
279284
}
280285

281286
async fn handle_own_details(self_address_bytes: DestinationAddressBytes) -> ServerResponse {
282-
let self_address = bs58::encode(&self_address_bytes).into_string();
287+
let self_address = self_address_bytes.to_base58_string();
283288
ServerResponse::OwnDetails {
284289
address: self_address,
285290
}
@@ -404,7 +409,7 @@ pub async fn start_websocket<T: 'static + NymTopology>(
404409
stream,
405410
message_tx.clone(),
406411
received_messages_query_tx.clone(),
407-
self_address,
412+
self_address.clone(),
408413
topology.clone(),
409414
));
410415
}

sfw-provider/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ pemstore = {path = "../common/pemstore"}
3131
sfw-provider-requests = { path = "./sfw-provider-requests" }
3232

3333
## will be moved to proper dependencies once released
34-
sphinx = { git = "https://github.com/nymtech/sphinx", rev="4e51ed38a5de6fcb454c8903f1fe5e6b52720c77" }
34+
sphinx = { git = "https://github.com/nymtech/sphinx", rev="23f9c89b257ee0936e70afd682e9ed6a62e89eee" }
3535

3636
[build-dependencies]
3737
built = "0.3.2"

sfw-provider/sfw-provider-requests/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ edition = "2018"
88

99
[dependencies]
1010
bs58 = "0.3.0"
11-
sphinx = { git = "https://github.com/nymtech/sphinx", rev="4e51ed38a5de6fcb454c8903f1fe5e6b52720c77" }
11+
sphinx = { git = "https://github.com/nymtech/sphinx", rev="23f9c89b257ee0936e70afd682e9ed6a62e89eee" }

sfw-provider/sfw-provider-requests/src/lib.rs

+13-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ pub const DUMMY_MESSAGE_CONTENT: &[u8] =
66

77
// To be renamed to 'AuthToken' once it is safe to replace it
88
#[derive(Debug, PartialEq, Eq, Hash, Clone)]
9-
pub struct AuthToken(pub [u8; 32]);
9+
pub struct AuthToken([u8; 32]);
1010

1111
#[derive(Debug)]
1212
pub enum AuthTokenConversionError {
@@ -15,6 +15,18 @@ pub enum AuthTokenConversionError {
1515
}
1616

1717
impl AuthToken {
18+
pub fn from_bytes(bytes: [u8; 32]) -> Self {
19+
AuthToken(bytes)
20+
}
21+
22+
pub fn to_bytes(&self) -> [u8; 32] {
23+
self.0
24+
}
25+
26+
pub fn as_bytes(&self) -> &[u8] {
27+
&self.0
28+
}
29+
1830
pub fn try_from_base58_string<S: Into<String>>(
1931
val: S,
2032
) -> Result<Self, AuthTokenConversionError> {

0 commit comments

Comments
 (0)