Skip to content

Commit

Permalink
chore(sns): Remove obsolete field airdrop_distribution (#4239)
Browse files Browse the repository at this point in the history
This PR removes the field `airdrop_distribution` from
`FractionalDeveloperVotingPower` since it's now obsolete.

< [Previous PR](#4137) |
  • Loading branch information
aterga authored Mar 5, 2025
1 parent e2a9827 commit a04682c
Show file tree
Hide file tree
Showing 10 changed files with 19 additions and 90 deletions.
2 changes: 0 additions & 2 deletions rs/nns/governance/src/governance/tests/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -452,7 +452,6 @@ mod convert_from_create_service_nervous_system_to_sns_init_payload_tests {
total_e8s: swap_total_e8s,
initial_swap_amount_e8s: swap_total_e8s,
},),
airdrop_distribution: None,
},
),
);
Expand Down Expand Up @@ -794,7 +793,6 @@ mod convert_create_service_nervous_system_proposal_to_sns_init_payload_tests_wit
total_e8s: swap_total_e8s,
initial_swap_amount_e8s: swap_total_e8s,
},),
airdrop_distribution: None,
},
),
);
Expand Down
7 changes: 0 additions & 7 deletions rs/nns/sns-wasm/canister/sns-wasm.did
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,6 @@ type AddWasmResponse = record {
result : opt Result;
};

type AirdropDistribution = record {
airdrop_neurons : vec NeuronDistribution;
};

type Canister = record {
id : opt principal;
};
Expand Down Expand Up @@ -56,9 +52,6 @@ type FractionalDeveloperVotingPower = record {
treasury_distribution : opt TreasuryDistribution;
developer_distribution : opt DeveloperDistribution;
swap_distribution : opt SwapDistribution;

// Obsolete fields.
airdrop_distribution : opt AirdropDistribution;
};

type GetAllowedPrincipalsResponse = record {
Expand Down
34 changes: 14 additions & 20 deletions rs/nns/sns-wasm/tests/upgrade_sns_instance.rs
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,7 @@ fn test_governance_restarts_root_if_root_cannot_stop_during_upgrade() {
};
let unstoppable_sns_wasm = sns_wasm::add_wasm_via_proposal(&machine, unstoppable_sns_wasm);

// To get an SNS neuron, we airdrop our new tokens to this user.
let user = PrincipalId::new_user_test_id(0);
let developer_neuron_controller = PrincipalId::new_user_test_id(0);

let payload = SnsInitPayload {
dapp_canisters: None,
Expand All @@ -98,12 +97,12 @@ fn test_governance_restarts_root_if_root_cannot_stop_during_upgrade() {
token_symbol: Some("AST".to_string()),
proposal_reject_cost_e8s: Some(E8S_PER_TOKEN),
neuron_minimum_stake_e8s: Some(E8S_PER_TOKEN),
fallback_controller_principal_ids: vec![user.to_string()],
fallback_controller_principal_ids: vec![developer_neuron_controller.to_string()],
initial_token_distribution: Some(InitialTokenDistribution::FractionalDeveloperVotingPower(
FractionalDeveloperVotingPower {
developer_distribution: Some(DeveloperDistribution {
developer_neurons: vec![NeuronDistribution {
controller: Some(user),
controller: Some(developer_neuron_controller),
stake_e8s: 10_000_000_000,
memo: 0,
dissolve_delay_seconds: 15780000, // 6 months
Expand All @@ -117,7 +116,6 @@ fn test_governance_restarts_root_if_root_cannot_stop_during_upgrade() {
total_e8s: 10_000_000_000,
initial_swap_amount_e8s: 10_000_000_000,
}),
airdrop_distribution: None,
},
)),
..SnsInitPayload::with_valid_values_for_testing_post_execution()
Expand All @@ -126,7 +124,7 @@ fn test_governance_restarts_root_if_root_cannot_stop_during_upgrade() {
// Will be used to make proposals and such. Fortunately, this guy has lots
// of money -> he'll be able to push proposals though.
let developer_sns_neuron_id = sns_governance_pb::NeuronId {
id: compute_neuron_staking_subaccount(user, /* memo */ 0)
id: compute_neuron_staking_subaccount(developer_neuron_controller, /* memo */ 0)
.0
.to_vec(),
};
Expand Down Expand Up @@ -160,11 +158,11 @@ fn test_governance_restarts_root_if_root_cannot_stop_during_upgrade() {

sns_wasm::add_wasm_via_proposal(&machine, sns_wasm_to_add);

// Make a proposal to upgrade (that is auto-executed) with the neuron for our user.
// Make a proposal to upgrade (that is auto-executed) from the developer_neuron_controller.
state_test_helpers::sns_make_proposal(
&machine,
governance,
user,
developer_neuron_controller,
developer_sns_neuron_id,
Proposal {
title: "Upgrade Canister.".into(),
Expand Down Expand Up @@ -226,8 +224,7 @@ fn run_upgrade_test(canister_type: SnsCanisterType) {

let wasm_map = sns_wasm::add_freshly_built_sns_wasms(&machine, ensure_sns_wasm_gzipped);

// To get an SNS neuron, we airdrop our new tokens to this user.
let user = PrincipalId::new_user_test_id(0);
let developer_neuron_controller = PrincipalId::new_user_test_id(0);

let payload = SnsInitPayload {
dapp_canisters: None,
Expand All @@ -236,12 +233,12 @@ fn run_upgrade_test(canister_type: SnsCanisterType) {
token_symbol: Some("AST".to_string()),
proposal_reject_cost_e8s: Some(E8S_PER_TOKEN),
neuron_minimum_stake_e8s: Some(E8S_PER_TOKEN),
fallback_controller_principal_ids: vec![user.to_string()],
fallback_controller_principal_ids: vec![developer_neuron_controller.to_string()],
initial_token_distribution: Some(InitialTokenDistribution::FractionalDeveloperVotingPower(
FractionalDeveloperVotingPower {
developer_distribution: Some(DeveloperDistribution {
developer_neurons: vec![NeuronDistribution {
controller: Some(user),
controller: Some(developer_neuron_controller),
stake_e8s: 100_000_000_000,
memo: 0,
dissolve_delay_seconds: 15780000, // 6 months
Expand All @@ -255,16 +252,15 @@ fn run_upgrade_test(canister_type: SnsCanisterType) {
total_e8s: 100_000_000_000,
initial_swap_amount_e8s: 10_000_000_000,
}),
airdrop_distribution: None,
},
)),
..SnsInitPayload::with_valid_values_for_testing_post_execution()
};

// Will be used to make proposals and such. Fortunately, this guy has lots
// of money -> he'll be able to push proposals though.
let airdrop_sns_neuron_id = sns_governance_pb::NeuronId {
id: compute_neuron_staking_subaccount(user, /* memo */ 0)
let sns_neuron_id = sns_governance_pb::NeuronId {
id: compute_neuron_staking_subaccount(developer_neuron_controller, /* memo */ 0)
.0
.to_vec(),
};
Expand All @@ -290,7 +286,7 @@ fn run_upgrade_test(canister_type: SnsCanisterType) {
let governance = CanisterId::unchecked_from_principal(governance.unwrap());

// Validate that upgrading Swap doesn't prevent upgrading other SNS canisters
let old_version = upgrade_swap(&machine, &wasm_map, governance, &airdrop_sns_neuron_id);
let old_version = upgrade_swap(&machine, &wasm_map, governance, &sns_neuron_id);

let original_hash = wasm_map.get(&canister_type).unwrap().sha256_hash();

Expand All @@ -308,8 +304,8 @@ fn run_upgrade_test(canister_type: SnsCanisterType) {
let proposal_id = state_test_helpers::sns_make_proposal(
&machine,
governance,
user,
airdrop_sns_neuron_id,
developer_neuron_controller,
sns_neuron_id,
Proposal {
title: "Upgrade Canister.".into(),
action: Some(Action::UpgradeSnsToNextVersion(UpgradeSnsToNextVersion {})),
Expand Down Expand Up @@ -519,7 +515,6 @@ fn upgrade_archive_sns_canister_via_sns_wasms() {
total_e8s: 100_000_000_000,
initial_swap_amount_e8s: 10_000_000_000,
}),
airdrop_distribution: None,
},
)),
..SnsInitPayload::with_valid_values_for_testing_post_execution()
Expand Down Expand Up @@ -768,7 +763,6 @@ fn test_out_of_sync_version_still_allows_upgrade_to_succeed() {
total_e8s: 100_000_000_000,
initial_swap_amount_e8s: 100_000_000_000,
}),
airdrop_distribution: None,
},
)),
..SnsInitPayload::with_valid_values_for_testing_post_execution()
Expand Down
4 changes: 3 additions & 1 deletion rs/nns/sns-wasm/unreleased_changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@ on the process that this file is part of, see

## Removed

* Remove (previously deprecated) airdrop neurons from initial SNS configuration. `SnsInitPayload.initial_token_distribution` must not specify any neurons in `airdrop_distribution`.
* Remove (previously deprecated) airdrop neurons from initial SNS configuration.

`SnsInitPayload.initial_token_distribution` must not specify `airdrop_distribution`.

## Fixed

Expand Down
9 changes: 2 additions & 7 deletions rs/sns/init/proto/ic_sns_init/pb/v1/sns_init.proto
Original file line number Diff line number Diff line change
Expand Up @@ -252,8 +252,8 @@ message FractionalDeveloperVotingPower {
// The swap bucket.
SwapDistribution swap_distribution = 3;

// OBSOLETE.
AirdropDistribution airdrop_distribution = 4;
reserved 4;
reserved "airdrop_distribution";
}

// The distributions awarded to developers at SNS genesis.
Expand Down Expand Up @@ -286,11 +286,6 @@ message SwapDistribution {
uint64 initial_swap_amount_e8s = 2;
}

// OBSOLETE.
message AirdropDistribution {
repeated NeuronDistribution airdrop_neurons = 1;
}

// A tuple of values used to create a Neuron available at SNS genesis.
message NeuronDistribution {
// The initial `PrincipalId` given permissions on a neuron available at genesis.
Expand Down
3 changes: 0 additions & 3 deletions rs/sns/init/src/create_service_nervous_system.rs
Original file line number Diff line number Diff line change
Expand Up @@ -332,9 +332,6 @@ impl TryFrom<create_service_nervous_system::InitialTokenDistribution>
developer_distribution,
treasury_distribution,
swap_distribution,

// Obsolete fields.
airdrop_distribution: None,
},
))
}
Expand Down
17 changes: 0 additions & 17 deletions rs/sns/init/src/distributions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,16 +99,6 @@ impl FractionalDeveloperVotingPower {
.as_ref()
.ok_or("Error: swap_distribution must be specified")?;

let airdrop_neurons = self
.airdrop_distribution
.clone()
.map(|airdrop_distribution| airdrop_distribution.airdrop_neurons)
.unwrap_or_default();

if !airdrop_neurons.is_empty() {
return Err("Error: airdrop_distribution is obsolete.".to_string());
}

self.validate_neurons(developer_distribution, nervous_system_parameters)?;

if swap_distribution.initial_swap_amount_e8s == 0 {
Expand Down Expand Up @@ -438,7 +428,6 @@ impl FractionalDeveloperVotingPower {
total_e8s: 10_000_000_000,
initial_swap_amount_e8s: 10_000_000_000,
}),
airdrop_distribution: None,
}
}
}
Expand Down Expand Up @@ -577,7 +566,6 @@ mod test {
total_e8s: swap_total,
initial_swap_amount_e8s: swap_initial_round,
}),
airdrop_distribution: None,
};

let canister_ids = create_canister_ids();
Expand Down Expand Up @@ -685,7 +673,6 @@ mod test {
total_e8s: swap_total,
initial_swap_amount_e8s: swap_initial_round,
}),
airdrop_distribution: None,
};

let parameters = NervousSystemParameters::with_default_values();
Expand Down Expand Up @@ -776,7 +763,6 @@ mod test {
total_e8s: 1_000_000_000,
initial_swap_amount_e8s: 100_000_000,
}),
airdrop_distribution: None,
};

// A basic valid NervousSystemParameter
Expand Down Expand Up @@ -982,7 +968,6 @@ mod test {
total_e8s: 1_000_000_000,
initial_swap_amount_e8s: 100_000_000,
}),
airdrop_distribution: None,
};

// A basic valid NervousSystemParameter
Expand Down Expand Up @@ -1030,7 +1015,6 @@ mod test {
total_e8s: 1_000_000_000,
initial_swap_amount_e8s: 100_000_000,
}),
airdrop_distribution: None,
};

// A basic valid NervousSystemParameter
Expand Down Expand Up @@ -1096,7 +1080,6 @@ mod test {
total_e8s: 1_000_000_000,
initial_swap_amount_e8s: 100_000_000,
}),
airdrop_distribution: None,
};

// A basic valid NervousSystemParameter
Expand Down
17 changes: 0 additions & 17 deletions rs/sns/init/src/gen/ic_sns_init.pb.v1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -274,9 +274,6 @@ pub struct FractionalDeveloperVotingPower {
/// The swap bucket.
#[prost(message, optional, tag = "3")]
pub swap_distribution: ::core::option::Option<SwapDistribution>,
/// OBSOLETE.
#[prost(message, optional, tag = "4")]
pub airdrop_distribution: ::core::option::Option<AirdropDistribution>,
}
/// The distributions awarded to developers at SNS genesis.
#[derive(
Expand Down Expand Up @@ -338,20 +335,6 @@ pub struct SwapDistribution {
#[prost(uint64, tag = "2")]
pub initial_swap_amount_e8s: u64,
}
/// OBSOLETE.
#[derive(
candid::CandidType,
candid::Deserialize,
serde::Serialize,
Eq,
Clone,
PartialEq,
::prost::Message,
)]
pub struct AirdropDistribution {
#[prost(message, repeated, tag = "1")]
pub airdrop_neurons: ::prost::alloc::vec::Vec<NeuronDistribution>,
}
/// A tuple of values used to create a Neuron available at SNS genesis.
#[derive(
candid::CandidType,
Expand Down
2 changes: 0 additions & 2 deletions rs/sns/init/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2241,7 +2241,6 @@ initial_token_distribution: !FractionalDeveloperVotingPower
swap_distribution:
total_e8s: 10000000000
initial_swap_amount_e8s: 10000000000
airdrop_distribution: null
".to_string();

assert_eq!(observed, Ok(expected));
Expand Down Expand Up @@ -3434,7 +3433,6 @@ initial_token_distribution: !FractionalDeveloperVotingPower
// Not used in this test.
developer_distribution: None,
treasury_distribution: None,
airdrop_distribution: None,
};
let sns_init_payload = SnsInitPayload {
max_direct_participation_icp_e8s: Some(MAX_DIRECT_ICP_CONTRIBUTION_TO_SWAP),
Expand Down
14 changes: 0 additions & 14 deletions testnet/tools/nns-tools/sns_default_test_init_params.yml
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,6 @@ wait_for_quiet_deadline_increase_seconds: 86400
# The initial token distribution must satisfy the following preconditions to be valid:
# - developer_distribution.developer_neurons.stake_e8s.sum <= u64:MAX
# - developer_neurons.developer_neurons.stake_e8s.sum <= swap_distribution.total_e8s
# - airdrop_distribution.airdrop_neurons.stake_e8s.sum <= u64:MAX
# - swap_distribution.initial_swap_amount_e8s > 0
# - swap_distribution.initial_swap_amount_e8s <= swap_distribution.total_e8s
# - swap_distribution.total_e8s >= developer_distribution.developer_neurons.stake_e8s.sum
Expand All @@ -216,11 +215,6 @@ wait_for_quiet_deadline_increase_seconds: 86400
# - initial_swap_amount_e8s: The initial amount of tokens deposited in the Swap canister for
# the initial token swap.
#
# - airdrop_distribution has one field:
# - airdrop_neurons: A list of NeuronDistributions that specify the neuron's stake and
# controlling principal. These neurons will be available at genesis in PreInitializationSwap
# mode. No voting power multiplier is applied to these neurons.
#
# Example:
# initial_token_distribution:
# FractionalDeveloperVotingPower:
Expand All @@ -239,12 +233,6 @@ wait_for_quiet_deadline_increase_seconds: 86400
# swap_distribution:
# total_e8s: 6000000000
# initial_swap_amount_e8s: 3000000000
# airdrop_distribution:
# airdrop_neurons:
# - controller: fod6j-klqsi-ljm4t-7v54x-2wd6s-6yduy-spdkk-d2vd4-iet7k-nakfi-qqe
# stake_e8s: 500000000
# memo: 0,
# dissolve_delay_seconds: 15780000 # 6 months
#
initial_token_distribution:
FractionalDeveloperVotingPower:
Expand All @@ -259,5 +247,3 @@ initial_token_distribution:
swap_distribution:
total_e8s: 3000000000000
initial_swap_amount_e8s: 3000000000000
airdrop_distribution:
airdrop_neurons: []

0 comments on commit a04682c

Please sign in to comment.