Skip to content

Commit afaa762

Browse files
committed
Validator: register callback for the validator record
1 parent 7491f6c commit afaa762

3 files changed

Lines changed: 41 additions & 4 deletions

File tree

validator-network/src/lib.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ use futures::stream::BoxStream;
77
use nimiq_keys::{Address, KeyPair};
88
use nimiq_network_interface::{
99
network::{CloseReason, MsgAcceptance, Network, SubscribeEvents, Topic},
10-
request::{Message, Request, RequestCommon},
10+
request::{Message, Request, RequestCommon}, validator_record::ValidatorRecord,
1111
};
1212
use nimiq_primitives::slots_allocation::Validators;
13+
use nimiq_utils::tagged_signing::TaggedSigned;
1314

1415
pub use crate::error::NetworkError;
1516

@@ -97,4 +98,13 @@ pub trait ValidatorNetwork: Send + Sync {
9798

9899
/// Returns the network peer ID for the given `validator_id` if it is known.
99100
fn get_peer_id(&self, validator_id: u16) -> Option<<Self::NetworkType as Network>::PeerId>;
101+
102+
/// Registers a callback to produce a signed ValidatorRecord from a given peer_id and timestamp.
103+
fn register_validator_signing_callback(
104+
&self,
105+
callback: impl Fn(<Self::NetworkType as Network>::PeerId, u64) -> TaggedSigned<ValidatorRecord<<Self::NetworkType as Network>::PeerId>, KeyPair>
106+
+ Send
107+
+ Sync
108+
+ 'static,
109+
);
100110
}

validator-network/src/network_impl.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use nimiq_network_interface::{
1111
};
1212
use nimiq_primitives::slots_allocation::{Validator, Validators};
1313
use nimiq_serde::{Deserialize, Serialize};
14-
use nimiq_utils::{spawn, stream::FuturesUnordered};
14+
use nimiq_utils::{spawn, stream::FuturesUnordered, tagged_signing::TaggedSigned};
1515
use parking_lot::RwLock;
1616
use time::OffsetDateTime;
1717

@@ -547,4 +547,15 @@ where
547547
self.get_validator_cache(validator_id)
548548
.potentially_outdated_peer_id()
549549
}
550+
551+
/// Registers a callback to produce a signed ValidatorRecord from a given peer_id and timestamp.
552+
fn register_validator_signing_callback(
553+
&self,
554+
callback: impl Fn(<Self::NetworkType as Network>::PeerId, u64) -> TaggedSigned<ValidatorRecord<<Self::NetworkType as Network>::PeerId>, KeyPair>
555+
+ Send
556+
+ Sync
557+
+ 'static,
558+
) {
559+
self.network.register_validator_signing_callback(callback)
560+
}
550561
}

validator/src/validator.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ use nimiq_mempool::config::MempoolConfig;
3131
use nimiq_mempool_task::MempoolTask;
3232
use nimiq_network_interface::{
3333
network::{MsgAcceptance, Network, NetworkEvent, SubscribeEvents},
34-
request::request_handler,
34+
request::request_handler, validator_record::ValidatorRecord,
3535
};
3636
use nimiq_primitives::{coin::Coin, policy::Policy};
3737
use nimiq_transaction_builder::TransactionBuilder;
38-
use nimiq_utils::spawn;
38+
use nimiq_utils::{spawn, tagged_signing::{TaggedKeyPair, TaggedSignable, TaggedSigned}};
3939
use nimiq_validator_network::{PubsubId, ValidatorNetwork};
4040
use parking_lot::RwLock;
4141
#[cfg(feature = "metrics")]
@@ -366,6 +366,22 @@ where
366366
// Inform the network about the current validator ID.
367367
self.network.set_validator_id(*self.slot_band.read());
368368

369+
let key = self.signing_key();
370+
let validator_address = self.validator_address();
371+
372+
self.network.register_validator_signing_callback(move |peer_id, timestamp| {
373+
let record = ValidatorRecord {
374+
timestamp,
375+
peer_id,
376+
validator_address: validator_address.clone(),
377+
};
378+
379+
let signature = key.tagged_sign(&record);
380+
381+
TaggedSigned::new(record, signature)
382+
});
383+
384+
369385
// Set the elected validators of the current epoch in the network as well.
370386
self.network.set_validators(validators);
371387

0 commit comments

Comments
 (0)