Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
1ee62d3
feat: add freeze pallet proposal
freakstatic Oct 24, 2023
16f6d89
update types package
freakstatic Oct 25, 2023
62f99f8
initial patch to fix query-node integration tests
mnaamani Nov 2, 2023
bd1a80e
Merge branch 'nara' into patch-nara-freeze-pallet-proposal
mnaamani Nov 2, 2023
85c1976
query-node mappings: handle freeze proposal
mnaamani Nov 2, 2023
c5d2f49
integration tests: add freeze pallet to list of proposals to test
mnaamani Nov 2, 2023
4b46c64
Merge pull request #1 from mnaamani/patch-nara-freeze-pallet-proposal
freakstatic Nov 2, 2023
bc43a5f
Merge branch 'qn-support-freeze-pallet-proposal' into nara-freeze-pal…
freakstatic Nov 2, 2023
21ca7e7
set Frozen pallet proposal grace period to 0
freakstatic Nov 2, 2023
34e214a
rename FreezePallet to SetPalletFozenStatus
freakstatic Nov 2, 2023
4748382
update types package
freakstatic Nov 2, 2023
5fa0c7a
make FreezablePallet non iterable_enum
freakstatic Nov 2, 2023
d24d390
fix typo on proposalTypeToProposalParamsKey
freakstatic Nov 2, 2023
a1fddc0
rename FreezePallet to SetPalletFozenStatus
freakstatic Nov 2, 2023
c057e91
style: fix ts format
freakstatic Nov 2, 2023
8c9bb2a
fix typo on proposal benchmarking
freakstatic Nov 2, 2023
ad6c8a7
improve query node mappings of frozen pallet proposal
freakstatic Nov 3, 2023
627354f
add query node chain-metadata folder to prettierignore
freakstatic Nov 3, 2023
e383df8
revert chain-metadata json format
freakstatic Nov 3, 2023
8a85a50
update types package
freakstatic Nov 3, 2023
dceb39e
style: fix ts format
freakstatic Nov 3, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions chain-metadata.json

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -2104,7 +2104,7 @@ type Proposal implements BaseGraphQLObject {
proposalexecutedeventproposal: [ProposalExecutedEvent!]
}

union ProposalDetails = SignalProposalDetails | RuntimeUpgradeProposalDetails | FundingRequestProposalDetails | SetMaxValidatorCountProposalDetails | CreateWorkingGroupLeadOpeningProposalDetails | FillWorkingGroupLeadOpeningProposalDetails | UpdateWorkingGroupBudgetProposalDetails | DecreaseWorkingGroupLeadStakeProposalDetails | SlashWorkingGroupLeadProposalDetails | SetWorkingGroupLeadRewardProposalDetails | TerminateWorkingGroupLeadProposalDetails | AmendConstitutionProposalDetails | CancelWorkingGroupLeadOpeningProposalDetails | SetMembershipPriceProposalDetails | SetCouncilBudgetIncrementProposalDetails | SetCouncilorRewardProposalDetails | SetInitialInvitationBalanceProposalDetails | SetInitialInvitationCountProposalDetails | SetMembershipLeadInvitationQuotaProposalDetails | SetReferralCutProposalDetails | VetoProposalDetails | UpdateChannelPayoutsProposalDetails
union ProposalDetails = SignalProposalDetails | RuntimeUpgradeProposalDetails | FundingRequestProposalDetails | SetMaxValidatorCountProposalDetails | CreateWorkingGroupLeadOpeningProposalDetails | FillWorkingGroupLeadOpeningProposalDetails | UpdateWorkingGroupBudgetProposalDetails | DecreaseWorkingGroupLeadStakeProposalDetails | SlashWorkingGroupLeadProposalDetails | SetWorkingGroupLeadRewardProposalDetails | TerminateWorkingGroupLeadProposalDetails | AmendConstitutionProposalDetails | CancelWorkingGroupLeadOpeningProposalDetails | SetMembershipPriceProposalDetails | SetCouncilBudgetIncrementProposalDetails | SetCouncilorRewardProposalDetails | SetInitialInvitationBalanceProposalDetails | SetInitialInvitationCountProposalDetails | SetMembershipLeadInvitationQuotaProposalDetails | SetReferralCutProposalDetails | VetoProposalDetails | UpdateChannelPayoutsProposalDetails | UpdatePalletFrozenStatusProposalDetails

union ProposalStatus = ProposalStatusDeciding | ProposalStatusGracing | ProposalStatusDormant | ProposalStatusVetoed | ProposalStatusExecuted | ProposalStatusExecutionFailed | ProposalStatusSlashed | ProposalStatusRejected | ProposalStatusExpired | ProposalStatusCancelled | ProposalStatusCanceledByRuntime

Expand Down Expand Up @@ -2822,6 +2822,11 @@ type UpdateChannelPayoutsProposalDetails {
payloadHash: String
}

type UpdatePalletFrozenStatusProposalDetails {
frozen: Boolean!
pallet: String!
}

type UpdateWorkingGroupBudgetProposalDetails {
"""
Amount to increase / decrease the working group budget by (will be decudted from / appended to council budget accordingly)
Expand Down
1 change: 1 addition & 0 deletions query-node/.prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
chain-metadata/
6 changes: 1 addition & 5 deletions query-node/chain-metadata/2002.json

Large diffs are not rendered by default.

14 changes: 11 additions & 3 deletions query-node/mappings/src/proposals.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
eslint-disable @typescript-eslint/naming-convention
*/
import { SubstrateEvent, DatabaseManager, EventContext, StoreContext } from '@joystream/hydra-common'
import { PalletProposalsCodexProposalDetails as RuntimeProposalDetails_V1001 } from '../generated/types/1001/types-lookup'
import { PalletProposalsCodexProposalDetails as RuntimeProposalDetails_V2002 } from '../generated/types/2002/types-lookup'
import BN from 'bn.js'
import {
Proposal,
Expand Down Expand Up @@ -58,6 +56,7 @@ import {
ProposalDiscussionThreadModeOpen,
ProposalStatus,
UpdateChannelPayoutsProposalDetails,
UpdatePalletFrozenStatusProposalDetails,
} from 'query-node/dist/model'
import {
asBN,
Expand All @@ -78,6 +77,9 @@ import {
ProposalsEngine_ProposalStatusUpdatedEvent_V1001 as ProposalStatusUpdatedEvent_V1001,
ProposalsEngine_VotedEvent_V1001 as ProposalVotedEvent_V1001,
} from '../generated/types'
import { PalletProposalsCodexProposalDetails as RuntimeProposalDetails_V1001 } from '../generated/types/1001/types-lookup'
import { PalletProposalsCodexProposalDetails as RuntimeProposalDetails_V2002 } from '../generated/types/2002/types-lookup'

import { createWorkingGroupOpeningMetadata } from './workingGroups'
import { blake2AsHex } from '@polkadot/util-crypto'
import { Bytes } from '@polkadot/types'
Expand Down Expand Up @@ -109,7 +111,7 @@ async function getOrCreateRuntimeWasmBytecode(store: DatabaseManager, bytecode:
async function parseProposalDetails(
event: SubstrateEvent,
store: DatabaseManager,
proposalDetails: RuntimeProposalDetails
proposalDetails: RuntimeProposalDetails_V1001 | RuntimeProposalDetails_V2002
): Promise<typeof ProposalDetails> {
const eventTime = new Date(event.blockTimestamp)

Expand Down Expand Up @@ -305,6 +307,12 @@ async function parseProposalDetails(
const asPayload = unwrap(specificDetails.payload)?.objectCreationParams
details.payloadHash = asPayload && bytesToString(asPayload.ipfsContentId)

return details
} else if ((proposalDetails as RuntimeProposalDetails_V2002).isSetPalletFozenStatus) {
const details = new UpdatePalletFrozenStatusProposalDetails()
const [frozen, pallet] = (proposalDetails as RuntimeProposalDetails_V2002).asSetPalletFozenStatus
details.frozen = frozen.isTrue
details.pallet = pallet.toString()
return details
} else {
throw new Error(`Unspported proposal details type: ${proposalDetails.type}`)
Expand Down
6 changes: 6 additions & 0 deletions query-node/schemas/proposals.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,11 @@ type UpdateChannelPayoutsProposalDetails @variant {
payloadHash: String
}

type UpdatePalletFrozenStatusProposalDetails @variant {
frozen: Boolean!
pallet: String!
}

union ProposalDetails =
SignalProposalDetails
| RuntimeUpgradeProposalDetails
Expand All @@ -355,3 +360,4 @@ union ProposalDetails =
| SetReferralCutProposalDetails
| VetoProposalDetails
| UpdateChannelPayoutsProposalDetails
| UpdatePalletFrozenStatusProposalDetails
7 changes: 7 additions & 0 deletions runtime-modules/common/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,13 @@ pub trait StorageOwnership {
+ PartialEq;
}

/// Defines which pallets can be frozen for the `SetPalletFozenStatus` proposal
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[derive(Encode, Decode, Clone, Copy, PartialEq, Debug, Eq, TypeInfo)]
pub enum FreezablePallet {
ProjectToken,
}

/// Defines time in both block number and substrate time abstraction.
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
#[derive(Clone, Encode, Decode, PartialEq, Eq, Debug, Default)]
Expand Down
23 changes: 23 additions & 0 deletions runtime-modules/proposals/codex/src/benchmarking.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use balances::Pallet as Balances;
use common::to_kb;
use common::working_group::WorkingGroup;
use common::BalanceKind;
use common::FreezablePallet;
use content::NftLimitPeriod;
use frame_benchmarking::v1::{account, benchmarks, Zero};
use frame_support::sp_runtime::traits::Bounded;
Expand Down Expand Up @@ -896,6 +897,28 @@ benchmarks! {
proposal_details
);
}

create_proposal_freeze_pallet {
let t in 1 .. to_kb(T::TitleMaxLength::get());
let d in 1 .. to_kb(T::DescriptionMaxLength::get());

let (account_id, member_id, general_proposal_paramters) =
create_proposal_parameters::<T>(t, d);

let proposal_details = ProposalDetails::SetPalletFozenStatus(true, FreezablePallet::ProjectToken);
}: create_proposal(
RawOrigin::Signed(account_id.clone()),
general_proposal_paramters.clone(),
proposal_details.clone()
)
verify {
create_proposal_verify::<T>(
account_id,
member_id,
general_proposal_paramters,
proposal_details
);
}
}

#[cfg(test)]
Expand Down
20 changes: 20 additions & 0 deletions runtime-modules/proposals/codex/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,11 @@ pub trait Config:

/// Max allowed number of validators in set max validator count proposal
type SetMaxValidatorCountProposalMaxValidators: Get<u32>;

/// `Freeze Pallet` proposal parameters
type SetPalletFozenStatusProposalParameters: Get<
ProposalParameters<Self::BlockNumber, BalanceOf<Self>>,
>;
}

/// Specialized alias of GeneralProposalParams
Expand Down Expand Up @@ -498,6 +503,9 @@ decl_module! {
const SetMaxValidatorCountProposalMaxValidators: u32 =
T::SetMaxValidatorCountProposalMaxValidators::get();

const SetPalletFozenStatusProposalParameters:
ProposalParameters<T::BlockNumber, BalanceOf<T>> = T::SetPalletFozenStatusProposalParameters::get();


/// Create a proposal, the type of proposal depends on the `proposal_details` variant
///
Expand Down Expand Up @@ -866,6 +874,9 @@ impl<T: Config> Module<T> {
);
}
}
ProposalDetails::SetPalletFozenStatus(..) => {
// Note: No checks for this proposal for now
}
}

Ok(())
Expand Down Expand Up @@ -933,6 +944,9 @@ impl<T: Config> Module<T> {
ProposalDetails::UpdateChannelPayouts(..) => {
T::UpdateChannelPayoutsProposalParameters::get()
}
ProposalDetails::SetPalletFozenStatus(..) => {
T::SetPalletFozenStatusProposalParameters::get()
}
}
}

Expand Down Expand Up @@ -1094,6 +1108,12 @@ impl<T: Config> Module<T> {
)
.saturated_into()
}
ProposalDetails::SetPalletFozenStatus(..) => {
WeightInfoCodex::<T>::create_proposal_freeze_pallet(
to_kb(title_length.saturated_into()),
to_kb(description_length.saturated_into()),
)
}
}
}
}
Expand Down
1 change: 1 addition & 0 deletions runtime-modules/proposals/codex/src/tests/mock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -669,6 +669,7 @@ impl crate::Config for Test {
type FundingRequestProposalMaxTotalAmount = FundingRequestProposalMaxTotalAmount;
type FundingRequestProposalMaxAccounts = FundingRequestProposalMaxAccounts;
type SetMaxValidatorCountProposalMaxValidators = SetMaxValidatorCountProposalMaxValidators;
type SetPalletFozenStatusProposalParameters = DefaultProposalParameters;
}

parameter_types! {
Expand Down
68 changes: 68 additions & 0 deletions runtime-modules/proposals/codex/src/tests/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2584,3 +2584,71 @@ fn create_update_channel_payouts_proposal_fails_when_min_cashout_exceeds_max_cas
);
});
}

#[test]
fn create_frozen_proposal_proposal_common_checks_succeed() {
initial_test_ext().execute_with(|| {
let general_proposal_parameters_no_staking = GeneralProposalParameters::<Test> {
member_id: 1,
title: b"title".to_vec(),
description: b"body".to_vec(),
staking_account_id: None,
exact_execution_block: None,
};

let general_proposal_parameters = GeneralProposalParameters::<Test> {
member_id: 1,
title: b"title".to_vec(),
description: b"body".to_vec(),
staking_account_id: Some(1),
exact_execution_block: None,
};

let general_proposal_parameters_incorrect_staking = GeneralProposalParameters::<Test> {
member_id: 1,
title: b"title".to_vec(),
description: b"body".to_vec(),
staking_account_id: Some(STAKING_ACCOUNT_ID_NOT_BOUND_TO_MEMBER),
exact_execution_block: None,
};

let proposal_details =
ProposalDetails::SetPalletFozenStatus(true, common::FreezablePallet::ProjectToken);

let proposal_fixture = ProposalTestFixture {
general_proposal_parameters: general_proposal_parameters.clone(),
proposal_details: proposal_details.clone(),
insufficient_rights_call: || {
ProposalsCodex::create_proposal(
RawOrigin::None.into(),
general_proposal_parameters_no_staking.clone(),
proposal_details.clone(),
)
},
invalid_stake_account_call: || {
ProposalsCodex::create_proposal(
RawOrigin::Signed(1).into(),
general_proposal_parameters_incorrect_staking.clone(),
proposal_details.clone(),
)
},
empty_stake_call: || {
ProposalsCodex::create_proposal(
RawOrigin::Signed(1).into(),
general_proposal_parameters_no_staking.clone(),
proposal_details.clone(),
)
},
successful_call: || {
ProposalsCodex::create_proposal(
RawOrigin::Signed(1).into(),
general_proposal_parameters.clone(),
proposal_details.clone(),
)
},
proposal_parameters:
<Test as crate::Config>::SetPalletFozenStatusProposalParameters::get(),
};
proposal_fixture.check_all();
});
}
4 changes: 4 additions & 0 deletions runtime-modules/proposals/codex/src/types.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#![warn(missing_docs)]

use codec::{Decode, Encode};
use common::FreezablePallet;
use scale_info::TypeInfo;
#[cfg(feature = "std")]
use serde::{Deserialize, Serialize};
Expand Down Expand Up @@ -118,6 +119,9 @@ pub enum ProposalDetails<

/// `Update Channel Payouts` proposal
UpdateChannelPayouts(UpdateChannelPayoutsParameters),

/// `SetPalletFozenStatus` proposal
SetPalletFozenStatus(bool, FreezablePallet),
}

impl<
Expand Down
Loading