mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-03 00:31:50 +00:00
Fix enr loading from disk with cgc (#7754)
N/A During building an enr on startup, we weren't using the value in the custody context. This was resulting in the enr value getting updated when the cgc updates, the change getting persisted, but getting set back to the default on restart. This PR takes the value explicitly from the custody context.
This commit is contained in:
@@ -159,6 +159,7 @@ pub fn build_or_load_enr<E: EthSpec>(
|
||||
local_key: Keypair,
|
||||
config: &NetworkConfig,
|
||||
enr_fork_id: &EnrForkId,
|
||||
custody_group_count: Option<u64>,
|
||||
next_fork_digest: [u8; 4],
|
||||
spec: &ChainSpec,
|
||||
) -> Result<Enr, String> {
|
||||
@@ -166,7 +167,14 @@ pub fn build_or_load_enr<E: EthSpec>(
|
||||
// Note: Discovery should update the ENR record's IP to the external IP as seen by the
|
||||
// majority of our peers, if the CLI doesn't expressly forbid it.
|
||||
let enr_key = CombinedKey::from_libp2p(local_key)?;
|
||||
let mut local_enr = build_enr::<E>(&enr_key, config, enr_fork_id, next_fork_digest, spec)?;
|
||||
let mut local_enr = build_enr::<E>(
|
||||
&enr_key,
|
||||
config,
|
||||
enr_fork_id,
|
||||
custody_group_count,
|
||||
next_fork_digest,
|
||||
spec,
|
||||
)?;
|
||||
|
||||
use_or_load_enr(&enr_key, &mut local_enr, config)?;
|
||||
Ok(local_enr)
|
||||
@@ -177,6 +185,7 @@ pub fn build_enr<E: EthSpec>(
|
||||
enr_key: &CombinedKey,
|
||||
config: &NetworkConfig,
|
||||
enr_fork_id: &EnrForkId,
|
||||
custody_group_count: Option<u64>,
|
||||
next_fork_digest: [u8; 4],
|
||||
spec: &ChainSpec,
|
||||
) -> Result<Enr, String> {
|
||||
@@ -271,14 +280,15 @@ pub fn build_enr<E: EthSpec>(
|
||||
|
||||
// only set `cgc` and `nfd` if PeerDAS fork (Fulu) epoch has been scheduled
|
||||
if spec.is_peer_das_scheduled() {
|
||||
let custody_group_count =
|
||||
if let Some(false_cgc) = config.advertise_false_custody_group_count {
|
||||
false_cgc
|
||||
} else if config.subscribe_all_data_column_subnets {
|
||||
spec.number_of_custody_groups
|
||||
} else {
|
||||
spec.custody_requirement
|
||||
};
|
||||
let custody_group_count = if let Some(cgc) = custody_group_count {
|
||||
cgc
|
||||
} else if let Some(false_cgc) = config.advertise_false_custody_group_count {
|
||||
false_cgc
|
||||
} else if config.subscribe_all_data_column_subnets {
|
||||
spec.number_of_custody_groups
|
||||
} else {
|
||||
spec.custody_requirement
|
||||
};
|
||||
builder.add_value(PEERDAS_CUSTODY_GROUP_COUNT_ENR_KEY, &custody_group_count);
|
||||
builder.add_value(NEXT_FORK_DIGEST_ENR_KEY, &next_fork_digest);
|
||||
}
|
||||
@@ -361,18 +371,22 @@ mod test {
|
||||
spec
|
||||
}
|
||||
|
||||
fn build_enr_with_config(config: NetworkConfig, spec: &ChainSpec) -> (Enr, CombinedKey) {
|
||||
fn build_enr_with_config(
|
||||
config: NetworkConfig,
|
||||
cgc: Option<u64>,
|
||||
spec: &ChainSpec,
|
||||
) -> (Enr, CombinedKey) {
|
||||
let keypair = libp2p::identity::secp256k1::Keypair::generate();
|
||||
let enr_key = CombinedKey::from_secp256k1(&keypair);
|
||||
let enr_fork_id = EnrForkId::default();
|
||||
let enr = build_enr::<E>(&enr_key, &config, &enr_fork_id, TEST_NFD, spec).unwrap();
|
||||
let enr = build_enr::<E>(&enr_key, &config, &enr_fork_id, cgc, TEST_NFD, spec).unwrap();
|
||||
(enr, enr_key)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_nfd_enr_encoding() {
|
||||
let spec = make_fulu_spec();
|
||||
let enr = build_enr_with_config(NetworkConfig::default(), &spec).0;
|
||||
let enr = build_enr_with_config(NetworkConfig::default(), None, &spec).0;
|
||||
assert_eq!(enr.next_fork_digest().unwrap(), TEST_NFD);
|
||||
}
|
||||
|
||||
@@ -384,7 +398,7 @@ mod test {
|
||||
};
|
||||
let spec = make_fulu_spec();
|
||||
|
||||
let enr = build_enr_with_config(config, &spec).0;
|
||||
let enr = build_enr_with_config(config, None, &spec).0;
|
||||
|
||||
assert_eq!(
|
||||
enr.custody_group_count::<E>(&spec).unwrap(),
|
||||
@@ -399,7 +413,7 @@ mod test {
|
||||
..NetworkConfig::default()
|
||||
};
|
||||
let spec = make_fulu_spec();
|
||||
let enr = build_enr_with_config(config, &spec).0;
|
||||
let enr = build_enr_with_config(config, None, &spec).0;
|
||||
|
||||
assert_eq!(
|
||||
enr.custody_group_count::<E>(&spec).unwrap(),
|
||||
@@ -407,9 +421,21 @@ mod test {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn custody_group_value() {
|
||||
let config = NetworkConfig {
|
||||
subscribe_all_data_column_subnets: true,
|
||||
..NetworkConfig::default()
|
||||
};
|
||||
let spec = make_fulu_spec();
|
||||
let enr = build_enr_with_config(config, Some(42), &spec).0;
|
||||
|
||||
assert_eq!(enr.custody_group_count::<E>(&spec).unwrap(), 42);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_encode_decode_eth2_enr() {
|
||||
let (enr, _key) = build_enr_with_config(NetworkConfig::default(), &E::default_spec());
|
||||
let (enr, _key) = build_enr_with_config(NetworkConfig::default(), None, &E::default_spec());
|
||||
// Check all Eth2 Mappings are decodeable
|
||||
enr.eth2().unwrap();
|
||||
enr.attestation_bitfield::<MainnetEthSpec>().unwrap();
|
||||
|
||||
@@ -1235,6 +1235,7 @@ mod tests {
|
||||
&enr_key,
|
||||
&config,
|
||||
&EnrForkId::default(),
|
||||
None,
|
||||
next_fork_digest,
|
||||
&spec,
|
||||
)
|
||||
|
||||
@@ -197,18 +197,21 @@ impl<E: EthSpec> Network<E> {
|
||||
.fork_context
|
||||
.next_fork_digest()
|
||||
.unwrap_or_else(|| ctx.fork_context.current_fork_digest());
|
||||
|
||||
let advertised_cgc = config
|
||||
.advertise_false_custody_group_count
|
||||
.unwrap_or(custody_group_count);
|
||||
let enr = crate::discovery::enr::build_or_load_enr::<E>(
|
||||
local_keypair.clone(),
|
||||
&config,
|
||||
&ctx.enr_fork_id,
|
||||
Some(advertised_cgc),
|
||||
next_fork_digest,
|
||||
&ctx.chain_spec,
|
||||
)?;
|
||||
|
||||
// Construct the metadata
|
||||
let advertised_cgc = config
|
||||
.advertise_false_custody_group_count
|
||||
.unwrap_or(custody_group_count);
|
||||
|
||||
let meta_data = utils::load_or_build_metadata(&config.network_dir, advertised_cgc);
|
||||
let seq_number = *meta_data.seq_number();
|
||||
let globals = NetworkGlobals::new(
|
||||
|
||||
Reference in New Issue
Block a user