Untitled
unknown
plain_text
a year ago
1.6 kB
29
Indexable
use anchor_lang::prelude::*;
// This is your program's public key and it will update
// automatically when you build the project.
declare_id!("9bCY7hbhpQozuoPn8yDDQ77YuQgDwKaCkAWqHYNBFmvM");
#[program]
mod hello_anchor {
use super::*;
pub fn create_proposal(
ctx: Context<CreateProposal>,
title: String,
description: String,
choices: Vec<String>,
deadline: u64,
) -> Result<()> {
let proposal_account = &mut ctx.accounts.proposal;
proposal_account.title = title;
proposal_account.description = description;
proposal_account.deadline = deadline;
let mut vec_choices = Vec::new();
for choice in choices {
let option = Choice {
label: choice,
count: 0,
};
vec_choices.push(option);
}
proposal_account.choices = vec_choices;
Ok(())
}
}
const MAX_COUNT_OF_CHOICES: usize = 10;
#[derive(Accounts)]
pub struct CreateProposal<'info> {
#[account(init, payer = signer, space = 8 + 32 + 32 + (32 + 8) * MAX_COUNT_OF_CHOICES + 8)]
pub proposal: Account<'info, Proposal>,
#[account(mut)]
pub signer: Signer<'info>,
pub system_program: Program<'info, System>,
}
#[account]
pub struct Proposal {
title: String,
description: String,
choices: Vec<Choice>,
deadline: u64,
}
#[derive(AnchorSerialize, AnchorDeserialize, Clone)]
pub struct Choice {
label: String,
count: u64,
}
Editor is loading...
Leave a Comment