Skip to content

Commit 0206830

Browse files
authored
test(btc): Port ckBTC tests from legacy ECDSA to chain key Registry API (dfinity#3820)
This PR adjusts ckBTC tests (and a test in message routing) to use the new chain key API, since the old one is now obsolete. Additionally, the legacy code is further cleaned in in the Registry component (canister and ic-admin).
1 parent 90a1b56 commit 0206830

File tree

6 files changed

+32
-71
lines changed

6 files changed

+32
-71
lines changed

rs/consensus/tests/framework/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use ic_protobuf::registry::subnet::v1::{CatchUpPackageContents, InitialNiDkgTran
2323
use ic_registry_client_fake::FakeRegistryClient;
2424
use ic_registry_client_helpers::crypto::CryptoRegistry;
2525
use ic_registry_proto_data_provider::ProtoRegistryDataProvider;
26-
use ic_registry_subnet_features::{ChainKeyConfig, EcdsaConfig, KeyConfig};
26+
use ic_registry_subnet_features::{ChainKeyConfig, KeyConfig};
2727
use ic_test_utilities_consensus::make_genesis;
2828
use ic_test_utilities_registry::SubnetRecordBuilder;
2929
use ic_types::{

rs/messaging/src/message_routing/tests.rs

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use ic_registry_local_registry::LocalRegistry;
2424
use ic_registry_local_store::{compact_delta_to_changelog, LocalStoreImpl, LocalStoreWriter};
2525
use ic_registry_proto_data_provider::{ProtoRegistryDataProvider, ProtoRegistryDataProviderError};
2626
use ic_registry_routing_table::{routing_table_insert_subnet, CanisterMigrations, RoutingTable};
27-
use ic_registry_subnet_features::{ChainKeyConfig, EcdsaConfig, KeyConfig};
27+
use ic_registry_subnet_features::{ChainKeyConfig, KeyConfig};
2828
use ic_replicated_state::Stream;
2929
use ic_test_utilities::state_manager::FakeStateManager;
3030
use ic_test_utilities_logger::with_test_replica_logger;
@@ -267,10 +267,6 @@ struct SubnetRecord<'a> {
267267
membership: &'a [NodeId],
268268
subnet_type: SubnetType,
269269
features: SubnetFeatures,
270-
// TODO: Remove this field
271-
#[allow(unused)]
272-
ecdsa_config: EcdsaConfig,
273-
/// This field will replace ecdsa_config.
274270
chain_key_config: ChainKeyConfig,
275271
max_number_of_canisters: u64,
276272
}
@@ -732,7 +728,6 @@ fn try_read_registry_succeeds_with_fully_specified_registry_records() {
732728
http_requests: true,
733729
..Default::default()
734730
},
735-
ecdsa_config: EcdsaConfig::default(),
736731
chain_key_config: ChainKeyConfig {
737732
key_configs: vec![
738733
KeyConfig {
@@ -1715,24 +1710,28 @@ fn process_batch_updates_subnet_metrics() {
17151710
http_requests: true,
17161711
..Default::default()
17171712
},
1718-
ecdsa_config: EcdsaConfig {
1719-
key_ids: vec![
1720-
EcdsaKeyId {
1721-
curve: EcdsaCurve::Secp256k1,
1722-
name: "ecdsa key 1".to_string(),
1713+
max_number_of_canisters: 387,
1714+
chain_key_config: ChainKeyConfig {
1715+
key_configs: vec![
1716+
KeyConfig {
1717+
key_id: MasterPublicKeyId::Ecdsa(EcdsaKeyId {
1718+
curve: EcdsaCurve::Secp256k1,
1719+
name: "ecdsa key 1".to_string(),
1720+
}),
1721+
max_queue_size: 891,
1722+
pre_signatures_to_create_in_advance: 891,
17231723
},
1724-
EcdsaKeyId {
1725-
curve: EcdsaCurve::Secp256k1,
1726-
name: "ecdsa key 2".to_string(),
1724+
KeyConfig {
1725+
key_id: MasterPublicKeyId::Ecdsa(EcdsaKeyId {
1726+
curve: EcdsaCurve::Secp256k1,
1727+
name: "ecdsa key 2".to_string(),
1728+
}),
1729+
max_queue_size: 891,
1730+
pre_signatures_to_create_in_advance: 891,
17271731
},
17281732
],
1729-
max_queue_size: Some(891),
17301733
..Default::default()
17311734
},
1732-
// TODO[NNS1-2969]: Use this field rather than ecdsa_config.
1733-
chain_key_config: ChainKeyConfig::default(),
1734-
1735-
max_number_of_canisters: 387,
17361735
};
17371736

17381737
let own_transcript = dummy_transcript_for_tests_with_params(

rs/registry/admin/src/types.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use ic_protobuf::registry::{
1313
};
1414
use ic_registry_nns_data_provider::registry::RegistryCanister;
1515
use ic_registry_provisional_whitelist::ProvisionalWhitelist;
16-
use ic_registry_subnet_features::{ChainKeyConfig, EcdsaConfig, SubnetFeatures};
16+
use ic_registry_subnet_features::{ChainKeyConfig, SubnetFeatures};
1717
use ic_registry_subnet_type::SubnetType;
1818
use ic_types::{PrincipalId, SubnetId};
1919
use indexmap::IndexMap;
@@ -74,7 +74,6 @@ pub(crate) struct SubnetRecord {
7474
pub max_number_of_canisters: u64,
7575
pub ssh_readonly_access: Vec<String>,
7676
pub ssh_backup_access: Vec<String>,
77-
pub ecdsa_config: Option<EcdsaConfig>,
7877
pub chain_key_config: Option<ChainKeyConfig>,
7978
}
8079

@@ -124,10 +123,6 @@ impl From<&SubnetRecordProto> for SubnetRecord {
124123
max_number_of_canisters: value.max_number_of_canisters,
125124
ssh_readonly_access: value.ssh_readonly_access.clone(),
126125
ssh_backup_access: value.ssh_backup_access.clone(),
127-
ecdsa_config: value
128-
.ecdsa_config
129-
.as_ref()
130-
.map(|c| c.clone().try_into().unwrap()),
131126
chain_key_config: value
132127
.chain_key_config
133128
.as_ref()

rs/registry/canister/src/mutations/do_update_subnet.rs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -537,13 +537,6 @@ mod tests {
537537
use maplit::btreemap;
538538
use std::str::FromStr;
539539

540-
fn make_ecdsa_key(name: &str) -> EcdsaKeyId {
541-
EcdsaKeyId {
542-
curve: EcdsaCurve::Secp256k1,
543-
name: name.to_string(),
544-
}
545-
}
546-
547540
fn make_empty_update_payload(subnet_id: SubnetId) -> UpdateSubnetPayload {
548541
UpdateSubnetPayload {
549542
subnet_id,
@@ -646,7 +639,7 @@ mod tests {
646639
.into(),
647640
),
648641
ecdsa_config: None,
649-
ecdsa_key_signing_enable: Some(vec![make_ecdsa_key("key_id_2")]),
642+
ecdsa_key_signing_enable: None,
650643
ecdsa_key_signing_disable: None,
651644
max_number_of_canisters: Some(10),
652645
ssh_readonly_access: Some(vec!["pub_key_0".to_string()]),

rs/registry/subnet_features/src/lib.rs

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -97,36 +97,6 @@ pub struct EcdsaConfig {
9797
pub idkg_key_rotation_period_ms: Option<u64>,
9898
}
9999

100-
impl From<EcdsaConfig> for pb::EcdsaConfig {
101-
fn from(item: EcdsaConfig) -> Self {
102-
pb::EcdsaConfig {
103-
quadruples_to_create_in_advance: item.quadruples_to_create_in_advance,
104-
key_ids: item.key_ids.iter().map(|key| key.into()).collect(),
105-
max_queue_size: item.max_queue_size.unwrap_or(DEFAULT_ECDSA_MAX_QUEUE_SIZE),
106-
signature_request_timeout_ns: item.signature_request_timeout_ns,
107-
idkg_key_rotation_period_ms: item.idkg_key_rotation_period_ms,
108-
}
109-
}
110-
}
111-
112-
impl TryFrom<pb::EcdsaConfig> for EcdsaConfig {
113-
type Error = ProxyDecodeError;
114-
115-
fn try_from(value: pb::EcdsaConfig) -> Result<Self, Self::Error> {
116-
let mut key_ids = vec![];
117-
for key in value.key_ids {
118-
key_ids.push(EcdsaKeyId::try_from(key)?);
119-
}
120-
Ok(EcdsaConfig {
121-
quadruples_to_create_in_advance: value.quadruples_to_create_in_advance,
122-
key_ids,
123-
max_queue_size: Some(value.max_queue_size),
124-
signature_request_timeout_ns: value.signature_request_timeout_ns,
125-
idkg_key_rotation_period_ms: value.idkg_key_rotation_period_ms,
126-
})
127-
}
128-
}
129-
130100
#[derive(Clone, Eq, PartialEq, Debug, CandidType, Deserialize, Serialize)]
131101
pub struct KeyConfig {
132102
pub key_id: MasterPublicKeyId,

rs/tests/ckbtc/src/lib.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@ use ic_nns_governance_api::pb::v1::{NnsFunction, ProposalStatus};
2929
use ic_nns_test_utils::{
3030
governance::submit_external_update_proposal, itest_helpers::install_rust_canister_from_path,
3131
};
32-
use ic_registry_subnet_features::SubnetFeatures;
33-
use ic_registry_subnet_features::{EcdsaConfig, DEFAULT_ECDSA_MAX_QUEUE_SIZE};
32+
use ic_registry_subnet_features::{SubnetFeatures, DEFAULT_ECDSA_MAX_QUEUE_SIZE};
3433
use ic_registry_subnet_type::SubnetType;
3534
use ic_system_test_driver::{
3635
driver::{
@@ -49,6 +48,7 @@ use ic_types::Height;
4948
use ic_types_test_utils::ids::subnet_test_id;
5049
use icp_ledger::ArchiveOptions;
5150
use registry_canister::mutations::do_update_subnet::UpdateSubnetPayload;
51+
use registry_canister::mutations::do_update_subnet::{ChainKeyConfig, KeyConfig};
5252
use slog::{debug, info, Logger};
5353
use std::{
5454
env,
@@ -245,15 +245,19 @@ pub async fn activate_ecdsa_signature(
245245
}
246246

247247
async fn enable_ecdsa_signing(governance: &Canister<'_>, subnet_id: SubnetId, key_id: EcdsaKeyId) {
248+
let key_id = MasterPublicKeyId::Ecdsa(key_id);
249+
248250
// The ECDSA key sharing process requires that a key first be added to a
249251
// subnet, and then enabling signing with that key must happen in a separate
250252
// proposal.
251253
let proposal_payload = UpdateSubnetPayload {
252254
subnet_id,
253-
ecdsa_config: Some(EcdsaConfig {
254-
quadruples_to_create_in_advance: 10,
255-
key_ids: vec![key_id.clone()],
256-
max_queue_size: Some(DEFAULT_ECDSA_MAX_QUEUE_SIZE),
255+
chain_key_config: Some(ChainKeyConfig {
256+
key_configs: vec![KeyConfig {
257+
key_id: Some(key_id.clone()),
258+
pre_signatures_to_create_in_advance: Some(10),
259+
max_queue_size: Some(DEFAULT_ECDSA_MAX_QUEUE_SIZE),
260+
}],
257261
signature_request_timeout_ns: None,
258262
idkg_key_rotation_period_ms: None,
259263
}),
@@ -263,7 +267,7 @@ async fn enable_ecdsa_signing(governance: &Canister<'_>, subnet_id: SubnetId, ke
263267

264268
let proposal_payload = UpdateSubnetPayload {
265269
subnet_id,
266-
ecdsa_key_signing_enable: Some(vec![key_id]),
270+
chain_key_signing_enable: Some(vec![key_id]),
267271
..empty_subnet_update()
268272
};
269273
execute_update_subnet_proposal(governance, proposal_payload).await;

0 commit comments

Comments
 (0)