From d18b16942443c731b4bb13622954126929832b2d Mon Sep 17 00:00:00 2001 From: brooksjeremy7 <92278656+brooksjeremy7@users.noreply.github.com> Date: Wed, 25 Jun 2025 09:33:48 -0700 Subject: [PATCH 1/3] fix: added validation for proposals so they have 2 outcomes --- programs/autocrat/src/error.rs | 2 ++ programs/autocrat/src/instructions/initialize_proposal.rs | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/programs/autocrat/src/error.rs b/programs/autocrat/src/error.rs index 87649abda..973d3450c 100644 --- a/programs/autocrat/src/error.rs +++ b/programs/autocrat/src/error.rs @@ -28,4 +28,6 @@ pub enum AutocratError { InsufficientLpTokenBalance, #[msg("The LP tokens passed in have less liquidity than the DAO's `min_quote_futarchic_liquidity` or `min_base_futachic_liquidity`")] InsufficientLpTokenLock, + #[msg("Question must have exactly 2 outcomes for binary futarchy")] + QuestionMustBeBinary, } diff --git a/programs/autocrat/src/instructions/initialize_proposal.rs b/programs/autocrat/src/instructions/initialize_proposal.rs index ac3199e80..f91ea011b 100644 --- a/programs/autocrat/src/instructions/initialize_proposal.rs +++ b/programs/autocrat/src/instructions/initialize_proposal.rs @@ -88,6 +88,12 @@ impl InitializeProposal<'_> { pub fn validate(&self) -> Result<()> { let clock = Clock::get()?; + require_eq!( + self.question.num_outcomes(), + 2, + AutocratError::QuestionMustBeBinary + ); + for amm in [&self.pass_amm, &self.fail_amm] { // an attacker is able to crank 5 observations before a proposal starts require!( From dcba7700057eb521ec6b9145d7353972895832fd Mon Sep 17 00:00:00 2001 From: brooksjeremy7 <92278656+brooksjeremy7@users.noreply.github.com> Date: Wed, 25 Jun 2025 10:45:33 -0700 Subject: [PATCH 2/3] fix: testing tests --- programs/autocrat/src/instructions/initialize_proposal.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/programs/autocrat/src/instructions/initialize_proposal.rs b/programs/autocrat/src/instructions/initialize_proposal.rs index f91ea011b..fb1f0dff3 100644 --- a/programs/autocrat/src/instructions/initialize_proposal.rs +++ b/programs/autocrat/src/instructions/initialize_proposal.rs @@ -93,6 +93,7 @@ impl InitializeProposal<'_> { 2, AutocratError::QuestionMustBeBinary ); + for amm in [&self.pass_amm, &self.fail_amm] { // an attacker is able to crank 5 observations before a proposal starts From c477d381027818ce4ee1c16634e8df05360a82a0 Mon Sep 17 00:00:00 2001 From: brooksjeremy7 <92278656+brooksjeremy7@users.noreply.github.com> Date: Wed, 25 Jun 2025 10:50:12 -0700 Subject: [PATCH 3/3] fix: testing tests v2 --- programs/autocrat/src/instructions/initialize_proposal.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/programs/autocrat/src/instructions/initialize_proposal.rs b/programs/autocrat/src/instructions/initialize_proposal.rs index fb1f0dff3..eb3a7d8e4 100644 --- a/programs/autocrat/src/instructions/initialize_proposal.rs +++ b/programs/autocrat/src/instructions/initialize_proposal.rs @@ -94,7 +94,6 @@ impl InitializeProposal<'_> { AutocratError::QuestionMustBeBinary ); - for amm in [&self.pass_amm, &self.fail_amm] { // an attacker is able to crank 5 observations before a proposal starts require!(