diff --git a/contracts/programs/dpm/src/lib.rs b/contracts/programs/dpm/src/lib.rs index fbafdc90..cbc9310a 100644 --- a/contracts/programs/dpm/src/lib.rs +++ b/contracts/programs/dpm/src/lib.rs @@ -5,39 +5,88 @@ declare_id!("Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS"); #[program] pub mod dpm { use super::*; - pub fn initialize(ctx: Context) -> ProgramResult { + + pub fn create_contract(ctx: Context, props: NewContractProps) -> ProgramResult { let contract = &mut ctx.accounts.contract; - contract.bets = 0; Ok(()) } - pub fn add_bet(ctx: Context) -> ProgramResult { - let contract = &mut ctx.accounts.contract; - contract.bets += 1; - + pub fn place_bet(ctx: Context, props: BetProps) -> ProgramResult { Ok(()) - } + } +} + +#[derive(Clone, AnchorSerialize, AnchorDeserialize)] +pub struct NewContractProps { + pub id: String, + pub creator_id: String, + pub question: String, + pub description: String, + pub seed_amounts: SeedAmounts, } #[derive(Accounts)] -pub struct Initialize<'info> { - #[account(init, payer = user, space = 9000)] +pub struct CreateContract<'info> { + #[account(init, payer = creator, space = 9000)] pub contract: Account<'info, Contract>, #[account(mut)] - pub user: Signer<'info>, + pub creator: Signer<'info>, - pub system_program: Program <'info, System>, + pub system_program: Program<'info, System>, +} + +#[derive(Clone, AnchorSerialize, AnchorDeserialize)] +pub struct BetProps { + pub amount: u64, + pub user_id: String, + pub outcome: BetOutcome, } #[derive(Accounts)] -pub struct AddBet<'info> { - #[account(mut)] - pub contract: Account<'info, Contract>, +pub struct PlaceBet<'info> { + #[account(mut)] + pub contract: Account<'info, Contract>, +} + +#[derive(Clone, AnchorSerialize, AnchorDeserialize)] +pub enum BetOutcome { + Yes, + No, +} + +#[derive(Clone, AnchorSerialize, AnchorDeserialize)] +pub enum ResolutionOutcome { + Yes, + No, + Cancel, +} + +#[derive(Clone, AnchorSerialize, AnchorDeserialize)] +pub struct SeedAmounts { + yes: u64, + no: u64, +} + +#[derive(Clone, AnchorSerialize, AnchorDeserialize)] +pub struct Resolution { + time: u64, + outcome: ResolutionOutcome, } #[account] pub struct Contract { - pub bets: u64, + pub id: String, + pub creator_id: String, + pub question: String, + pub description: String, + pub seed_amounts: SeedAmounts, + + pub created_time: u64, + pub last_updated_time: u64, + + pub resolution: Option + + // pub bets: Vec }