Skip to content

Commit 9cc9bbe

Browse files
committed
cleanup
1 parent 2c8157c commit 9cc9bbe

File tree

4 files changed

+53
-51
lines changed

4 files changed

+53
-51
lines changed

rust/rbac-registration/src/cardano/cip509/cip509.rs

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -319,18 +319,6 @@ impl Cip509 {
319319
self.catalyst_id.as_ref()
320320
}
321321

322-
/// Returns a list of addresses extracted from certificate URIs of a specific role.
323-
#[must_use]
324-
pub fn certificate_addresses(
325-
&self,
326-
role: usize,
327-
) -> HashSet<Address> {
328-
self.metadata
329-
.as_ref()
330-
.map(|m| m.certificate_uris.role_addresses(role))
331-
.unwrap_or_default()
332-
}
333-
334322
/// Return validation signature.
335323
#[must_use]
336324
pub fn validation_signature(&self) -> Option<&ValidationSignature> {
@@ -349,6 +337,14 @@ impl Cip509 {
349337
self.metadata.as_ref()
350338
}
351339

340+
/// Returns a set of addresses.
341+
#[must_use]
342+
pub fn addresses(&self) -> HashSet<Address> {
343+
self.certificate_uris()
344+
.map(Cip0134UriSet::addresses)
345+
.unwrap_or_default()
346+
}
347+
352348
/// Returns a set of stake addresses.
353349
#[must_use]
354350
pub fn stake_addresses(&self) -> HashSet<StakeAddress> {

rust/rbac-registration/src/cardano/cip509/utils/cip134_uri_set.rs

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,13 @@ impl Cip0134UriSet {
6363

6464
/// Returns a mapping from the x509 certificate index to URIs contained within.
6565
#[must_use]
66-
pub fn x_uris(&self) -> &UrisMap {
66+
pub(crate) fn x_uris(&self) -> &UrisMap {
6767
&self.0.x_uris
6868
}
6969

7070
/// Returns a mapping from the c509 certificate index to URIs contained within.
7171
#[must_use]
72-
pub fn c_uris(&self) -> &UrisMap {
72+
pub(crate) fn c_uris(&self) -> &UrisMap {
7373
&self.0.c_uris
7474
}
7575

@@ -88,42 +88,48 @@ impl Cip0134UriSet {
8888
self.x_uris().is_empty() && self.c_uris().is_empty()
8989
}
9090

91-
/// Returns a list of addresses by the given role.
91+
/// Returns a list of active (without taken) URIs by the given role.
9292
#[must_use]
93-
pub fn role_addresses(
93+
pub(crate) fn role_uris(
9494
&self,
9595
role: usize,
96-
) -> HashSet<Address> {
96+
) -> HashSet<Cip0134Uri> {
9797
let mut result = HashSet::new();
9898

9999
if let Some(uris) = self.x_uris().get(&role) {
100-
result.extend(uris.iter().map(|uri| uri.address().clone()));
100+
result.extend(uris.iter().filter(|v| !self.0.taken.contains(v)).cloned());
101101
}
102102
if let Some(uris) = self.c_uris().get(&role) {
103-
result.extend(uris.iter().map(|uri| uri.address().clone()));
103+
result.extend(uris.iter().filter(|v| !self.0.taken.contains(v)).cloned());
104104
}
105105

106106
result
107107
}
108108

109-
/// Returns a set of stake addresses by the given role.
109+
/// Returns a set of active (without taken) stake addresses by the given role.
110110
#[must_use]
111-
pub fn role_stake_addresses(
111+
pub(crate) fn role_stake_addresses(
112112
&self,
113113
role: usize,
114114
) -> HashSet<StakeAddress> {
115-
self.role_addresses(role)
115+
self.role_uris(role)
116116
.iter()
117-
.filter_map(|address| {
118-
match address {
117+
.filter_map(|uri| {
118+
match uri.address() {
119119
Address::Stake(a) => Some(a.clone().into()),
120120
_ => None,
121121
}
122122
})
123123
.collect()
124124
}
125125

126-
/// Returns a set of all stake addresses.
126+
/// Returns a set of all active (without taken) addresses.
127+
#[must_use]
128+
pub fn addresses(&self) -> HashSet<Address> {
129+
self.values().map(Cip0134Uri::address).cloned().collect()
130+
}
131+
132+
/// Returns a set of all active (without taken) stake addresses.
127133
#[must_use]
128134
pub fn stake_addresses(&self) -> HashSet<StakeAddress> {
129135
self.values()
@@ -401,7 +407,7 @@ mod tests {
401407
let set = cip509.certificate_uris().unwrap();
402408
assert!(!set.is_empty());
403409
assert!(set.c_uris().is_empty());
404-
assert_eq!(set.role_addresses(0).len(), 1);
410+
assert_eq!(set.role_uris(0).len(), 1);
405411
assert_eq!(set.role_stake_addresses(0).len(), 1);
406412
assert_eq!(set.stake_addresses().len(), 1);
407413

rust/rbac-registration/src/cardano/state.rs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
44
use std::future::Future;
55

6-
use cardano_blockchain_types::StakeAddress;
6+
use cardano_blockchain_types::pallas_addresses::Address;
77
use catalyst_types::catalyst_id::CatalystId;
88
use ed25519_dalek::VerifyingKey;
99

@@ -23,12 +23,11 @@ pub trait RbacChainsState {
2323
id: &CatalystId,
2424
) -> impl Future<Output = anyhow::Result<bool>> + Send;
2525

26-
/// Returns a current valid RBAC chain Catalyst ID corresponding to the given stake
27-
/// address.
28-
fn chain_catalyst_id_from_stake_address(
26+
/// Returns `true` if a provided address already used by any RBAC chain.
27+
fn is_addressed_used(
2928
&self,
30-
address: &StakeAddress,
31-
) -> impl Future<Output = anyhow::Result<Option<CatalystId>>> + Send;
29+
address: &Address,
30+
) -> impl Future<Output = anyhow::Result<bool>> + Send;
3231

3332
/// Returns a corresponding to the RBAC chain's Catalyst ID corresponding by the given
3433
/// signing public key.
@@ -37,11 +36,10 @@ pub trait RbacChainsState {
3736
key: &VerifyingKey,
3837
) -> impl Future<Output = anyhow::Result<Option<CatalystId>>> + Send;
3938

40-
/// Update the chain by "taking" the given `StakeAddress` for the corresponding
39+
/// Update the chain by "taking" the given `Address` for the corresponding
4140
/// RBAC chain's by the given `CatalystId`.
42-
fn take_stake_address_from_chain(
41+
fn take_address_from_chains(
4342
&mut self,
44-
id: &CatalystId,
45-
address: &StakeAddress,
43+
addresses: impl Iterator<Item = Address>,
4644
) -> impl Future<Output = anyhow::Result<()>> + Send;
4745
}

rust/rbac-registration/src/registration/cardano/mod.rs

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ use std::{
99

1010
use anyhow::Context;
1111
use c509_certificate::c509::C509;
12-
use cardano_blockchain_types::{hashes::TransactionId, Point, StakeAddress, TxnIndex};
12+
use cardano_blockchain_types::{
13+
hashes::TransactionId, pallas_addresses::Address, Point, StakeAddress, TxnIndex,
14+
};
1315
use catalyst_types::{
1416
catalyst_id::{key_rotation::KeyRotation, role_index::RoleId, CatalystId},
1517
conversion::zero_out_last_n_bytes,
@@ -75,11 +77,9 @@ impl RegistrationChain {
7577
return Ok(None);
7678
}
7779

78-
for address in &cip509.stake_addresses() {
79-
if let Some(id) = state.chain_catalyst_id_from_stake_address(address).await? {
80-
state.take_stake_address_from_chain(&id, address).await?;
81-
}
82-
}
80+
state
81+
.take_address_from_chains(cip509.addresses().into_iter())
82+
.await?;
8383

8484
Ok(Some(new_chain))
8585
}
@@ -114,18 +114,14 @@ impl RegistrationChain {
114114
};
115115

116116
// Check that addresses from the new registration aren't used in other chains.
117-
let previous_addresses = self.stake_addresses();
118-
let reg_addresses = cip509.stake_addresses();
117+
let previous_addresses = self.addresses();
118+
let reg_addresses = cip509.addresses();
119119
let new_addresses: Vec<_> = reg_addresses.difference(&previous_addresses).collect();
120120
for address in &new_addresses {
121-
if state
122-
.chain_catalyst_id_from_stake_address(address)
123-
.await?
124-
.is_some()
125-
{
121+
if state.is_addressed_used(address).await? {
126122
cip509.report().functional_validation(
127-
&format!("{address} stake addresses is already used"),
128-
"It isn't allowed to use same stake address in multiple registration chains, if its not a new chain",
123+
&format!("{address} addresses is already used"),
124+
"It isn't allowed to use same address in multiple registration chains, if its not a new chain",
129125
);
130126
}
131127
}
@@ -317,6 +313,12 @@ impl RegistrationChain {
317313
.and_then(|rdr| rdr.encryption_key_from_rotation(rotation))
318314
}
319315

316+
/// Returns all addresses associated to this chain.
317+
#[must_use]
318+
pub fn addresses(&self) -> HashSet<Address> {
319+
self.inner.certificate_uris.addresses()
320+
}
321+
320322
/// Returns all stake addresses associated to this chain.
321323
#[must_use]
322324
pub fn stake_addresses(&self) -> HashSet<StakeAddress> {

0 commit comments

Comments
 (0)