I am trying to fast track a referendum but the runtime has InstantAllowed set to false. When i try to execute the extrinsic I get a democracy.InstantNotAllowed error.

Also, the votingPeriod and Delay parameters are slightly ambiguous. Does it require the block number or number of blocks?

enter image description here

parameter_types! {
    pub LaunchPeriod: BlockNumber = prod_or_fast!(2 * DAYS, 1, "KAB_LAUNCH_PERIOD");
    pub VotingPeriod: BlockNumber = prod_or_fast!(7 * DAYS, 1 * MINUTES, "KAB_VOTING_PERIOD");
    pub FastTrackVotingPeriod: BlockNumber = prod_or_fast!(3 * DAYS , 1 * MINUTES, "KAB_FAST_TRACK_VOTING_PERIOD");
    pub const MinimumDeposit: Balance = 1 * CENTS;
    pub EnactmentPeriod: BlockNumber = prod_or_fast!(1 * DAYS, 1, "KAB_ENACTMENT_PERIOD");
    pub CooloffPeriod: BlockNumber = prod_or_fast!(7 * DAYS, 1 * MINUTES, "KAB_COOLOFF_PERIOD");
    pub const InstantAllowed: bool = false;
    pub const MaxVotes: u32 = 100;
    pub const MaxProposals: u32 = 100;
    pub const PreimageByteDeposit: Balance = 1 * BILLICENTS;

impl pallet_democracy::Config for Runtime {
    type Proposal = Call;
    type Event = Event;
    type Currency = Balances;
    type EnactmentPeriod = EnactmentPeriod;
    type VoteLockingPeriod = EnactmentPeriod;
    type LaunchPeriod = LaunchPeriod;
    type VotingPeriod = VotingPeriod;
    type MinimumDeposit = MinimumDeposit;
    type ExternalOrigin = EnsureSigned<AccountId>;
    type ExternalMajorityOrigin = EnsureSigned<AccountId>;
    type ExternalDefaultOrigin = EnsureSigned<AccountId>;
    type FastTrackOrigin = EnsureSigned<AccountId>;
    type InstantOrigin = EnsureSigned<AccountId>;
    type InstantAllowed = InstantAllowed;
    type FastTrackVotingPeriod = FastTrackVotingPeriod;
    type CancellationOrigin = EnsureRoot<AccountId>;
    type BlacklistOrigin = EnsureRoot<AccountId>;
    type CancelProposalOrigin = EnsureRoot<AccountId>;
    type VetoOrigin = EnsureSigned<AccountId>;
    type CooloffPeriod = CooloffPeriod;
    type PreimageByteDeposit = PreimageByteDeposit;
    type OperationalPreimageOrigin = EnsureSigned<AccountId>;
    type Slash = Treasury;
    type Scheduler = Scheduler;
    type PalletsOrigin = OriginCaller;
    type MaxVotes = MaxVotes;
    type WeightInfo = pallet_democracy::weights::SubstrateWeight<Runtime>;
    type MaxProposals = MaxProposals;

1 Answer 1


votingPeriod is the period for which voting will be open (in number of blocks). For the extrinsic to succeed one of the two conditions must be met:

  • votingPeriod is greater or equal to the FastTrackVotingPeriod defined in the pallet's config and origin for the call is FastTrackOrigin, or
  • origin for the call is InstantOrigin and InstantAllowed is true.

From the error raised (InstantNotAllowed) I infer that you must have specified a votingPeriod lower than FastTrackVotingPeriod so the code assumed that it is supposed to be an instant referendum, but this failed because InstantAllowed is false in your config.

delay is also number of blocks. It's the number of blocks between accepting the proposal in a referendum and enacting it.

  • 1
    Ok thats clear. i have prod or fast macro, but perhaps my parachain is set to live on the staging net so its expecting blocknumber to be at least 3 days. Ok makes sense Nov 9, 2022 at 15:31
  • 1
    @Decentration Please consider marking the question as resolved. Nov 10, 2022 at 11:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.