From 322a8e4585ea4b0d8d9d925487c254f8a9a1630d Mon Sep 17 00:00:00 2001 From: Aspirin Date: Thu, 29 Feb 2024 13:20:55 +0100 Subject: [PATCH 1/2] =?UTF-8?q?feat=20:=20add=20get=20campaign=20feature?= =?UTF-8?q?=20=F0=9F=A6=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 41 +----- programs/smart-contracts/src/lib.rs | 206 ++++++++++++++++------------ 2 files changed, 127 insertions(+), 120 deletions(-) diff --git a/README.md b/README.md index a3c538c..aa068c1 100644 --- a/README.md +++ b/README.md @@ -29,49 +29,20 @@

## 📝 About + Exploring the development of a crowdfunding smart contract on the Solana blockchain, leveraging the Rust programming language and the Anchor framework. Crowdfunding has emerged as a popular method for raising funds for various projects, initiatives, and charitable causes, and blockchain technology introduces new possibilities for enhancing transparency, security, and efficiency in this process. ## 🏛️ Architecture +


system design

-```sh -- User Interface - ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ - │ Frontend │ │ Frontend │ │ Frontend │ - └───────┬───────┘ └───────┬───────┘ └───────┬───────┘ - │ │ │ - ▼ ▼ ▼ - ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ - │ User Wallet │ │ User Wallet │ │ User Wallet │ - └───────────────┘ └───────────────┘ └───────────────┘ - │ │ │ - └───────────────┬──────────┼───────────────┬──────────┼───────────────┐ - ▼ │ ▼ │ │ - ┌───────────────┐ │ ┌───────────────┐ │ Smart │ - │ Solana RPC │ │ │ Solana RPC │ │ Contracts │ - └───────────────┘ │ └───────────────┘ │ │ - │ │ │ │ │ - └──────────┼──────────────┼──────────┼───────────────┘ - ▼ ▼ │ - ┌─────────────────────────┐ │ - │ Anchor Lang Program │◀──────┘ - └─────────────────────────┘ - │ │ │ - │ │ │ - ┌────────────┘ │ └────────────┐ - │ │ │ - ┌────────────────┐┌────────────────┐┌────────────────┐ - │ Create ││ Withdraw ││ Donate │ - │ Function ││ Function ││ Function │ - └────────────────┘└────────────────┘└────────────────┘ -``` - ## 🎯 Features -The crowdfunding smart contract implemented using the Anchor framework on the Solana blockchain offers a range of features designed to enhance the fundraising experience while ensuring transparency, security, and efficiency. + +The crowdfunding smart contract implemented using the Anchor framework on the Solana blockchain offers a range of features designed to enhance the fundraising experience while ensuring transparency, security, and efficiency. 1. Campaign Creation: @@ -122,6 +93,6 @@ category : "which type of campaign" 8. Immutable Record Keeping: - Transactional data and campaign details recorded on the Solana blockchain are immutable and tamper-proof, providing a permanent and verifiable record of fundraising activities. -Immutable records enhance auditability, mitigating the risk of fraud or data manipulation and fostering trust among stakeholders. + Immutable records enhance auditability, mitigating the risk of fraud or data manipulation and fostering trust among stakeholders. -## \ No newline at end of file +## diff --git a/programs/smart-contracts/src/lib.rs b/programs/smart-contracts/src/lib.rs index 3174354..6bc6eb2 100644 --- a/programs/smart-contracts/src/lib.rs +++ b/programs/smart-contracts/src/lib.rs @@ -1,111 +1,147 @@ use anchor_lang::prelude::*; use anchor_lang::solana_program::entrypoint::ProgramResult; -declare_id!("HYCWfDk8ZU8SF5oF9CE2CyChgBU6yndn82Umo4iE1Q9T"); +declare_id!("E4fXqx7ybioeqZsHWNndNnqnpQ93DnV99gKnnxWXjvdu"); #[program] pub mod smart_contracts { - use super::*; - - //creates a campaign - pub fn create( - ctx: Context, - name: String, - description: String, - target_amount: u64, - project_url: String, - progress_update_url: String, - project_image_url: String, - category: String - ) -> ProgramResult { - let campaign = &mut ctx.accounts.campaign; - campaign.name = name; - campaign.description = description; - campaign.target_amount = target_amount; - campaign.project_url = project_url; - campaign.progress_update_url = progress_update_url; - campaign.project_image_url = project_image_url; - campaign.category = category; - campaign.amount_donated = 0; - campaign.amount_withdrawn = 0; - campaign.admin = *ctx.accounts.user.key; - Ok(()) + use super::*; + + //creates a campaign + pub fn create( + ctx: Context, + name: String, + description: String, + target_amount: u64, + project_url: String, + progress_update_url: String, + project_image_url: String, + category: String + ) -> ProgramResult { + let campaign = &mut ctx.accounts.campaign; + campaign.name = name; + campaign.description = description; + campaign.target_amount = target_amount; + campaign.project_url = project_url; + campaign.progress_update_url = progress_update_url; + campaign.project_image_url = project_image_url; + campaign.category = category; + campaign.amount_donated = 0; + campaign.amount_withdrawn = 0; + campaign.admin = *ctx.accounts.user.key; + Ok(()) + } + + + + //Withdraw from a campaign + pub fn withdraw(ctx: Context, amount: u64) -> ProgramResult { + let campaign = &mut ctx.accounts.campaign; + let user = &mut ctx.accounts.user; + //restricts Withdrawal to campaign admin + if campaign.admin != *user.key { + return Err(ProgramError::IncorrectProgramId); } - //Withdraw from a campaign - pub fn withdraw(ctx: Context, amount: u64) -> ProgramResult { - let campaign = &mut ctx.accounts.campaign; - let user = &mut ctx.accounts.user; - //restricts Withdrawal to campaign admin - if campaign.admin != *user.key { - return Err(ProgramError::IncorrectProgramId); - } - let rent_balance = Rent::get()?.minimum_balance(campaign.to_account_info().data_len()); - if **campaign.to_account_info().lamports.borrow() - rent_balance < amount { - return Err(ProgramError::InsufficientFunds); - } - **campaign.to_account_info().try_borrow_mut_lamports()? -= amount; - **user.to_account_info().try_borrow_mut_lamports()? += amount; - (&mut ctx.accounts.campaign).amount_withdrawn += amount; - Ok(()) + let rent_balance = Rent::get()?.minimum_balance(campaign.to_account_info().data_len()); + if **campaign.to_account_info().lamports.borrow() - rent_balance < amount { + return Err(ProgramError::InsufficientFunds); } - //Donate to a campaign - pub fn donate(ctx: Context, amount: u64) -> ProgramResult { - let ix = anchor_lang::solana_program::system_instruction::transfer( - &ctx.accounts.user.key(), - &ctx.accounts.campaign.key(), - amount - ); - anchor_lang::solana_program::program::invoke( - &ix, - &[ctx.accounts.user.to_account_info(), ctx.accounts.campaign.to_account_info()] - ); - (&mut ctx.accounts.campaign).amount_donated += amount; - Ok(()) + **campaign.to_account_info().try_borrow_mut_lamports()? -= amount; + **user.to_account_info().try_borrow_mut_lamports()? += amount; + (&mut ctx.accounts.campaign).amount_withdrawn += amount; + Ok(()) + } + + + + //Donate to a campaign + pub fn donate(ctx: Context, amount: u64) -> ProgramResult { + let ix = anchor_lang::solana_program::system_instruction::transfer( + &ctx.accounts.user.key(), + &ctx.accounts.campaign.key(), + amount + ); + // Store the result of the invoke function call + let result = anchor_lang::solana_program::program::invoke( + &ix, + &[ctx.accounts.user.to_account_info(), ctx.accounts.campaign.to_account_info()] + ); + // Check if the invoke operation was successful + if let Err(e) = result { + return Err(e.into()); // Convert the error to a ProgramResult + } + // Proceed with the rest of the function + (&mut ctx.accounts.campaign).amount_donated += amount; + Ok(()) + } + + //Get the campaign + pub fn get_campaign(ctx: Context) -> ProgramResult { + let campaign = &ctx.accounts.campaign; + let user = &ctx.accounts.user; + if campaign.admin != *user.key { + return Err(ProgramError::IncorrectProgramId); + } + Ok(()) } + + } #[derive(Accounts)] pub struct Create<'info> { - #[account( - init, - payer = user, - space = 9000, - seeds = [b"CROWDFUND".as_ref(), user.key().as_ref()], - bump - )] - pub campaign: Account<'info, Campaign>, - #[account(mut)] - pub user: Signer<'info>, - pub system_program: Program<'info, System>, + #[account( + init, + payer = user, + space = 9000, + seeds = [b"CROWDFUND".as_ref(), user.key().as_ref()], + bump + )] + pub campaign: Account<'info, Campaign>, + #[account(mut)] + pub user: Signer<'info>, + pub system_program: Program<'info, System>, } + #[derive(Accounts)] pub struct Withdraw<'info> { - #[account(mut)] - pub campaign: Account<'info, Campaign>, - #[account(mut)] - pub user: Signer<'info>, + #[account(mut)] + pub campaign: Account<'info, Campaign>, + #[account(mut)] + pub user: Signer<'info>, } + + #[derive(Accounts)] pub struct Donate<'info> { - #[account(mut)] - pub campaign: Account<'info, Campaign>, - #[account(mut)] - pub user: Signer<'info>, - pub system_program: Program<'info, System>, + #[account(mut)] + pub campaign: Account<'info, Campaign>, + #[account(mut)] + pub user: Signer<'info>, + pub system_program: Program<'info, System>, } +#[derive(Accounts)] +pub struct GetCampaign<'info> { + #[account(mut)] + pub campaign: Account<'info, Campaign>, + #[account(mut)] + pub user: Signer<'info>, +} + + #[account] pub struct Campaign { - pub admin: Pubkey, - pub name: String, - pub description: String, - pub target_amount: u64, - pub project_url: String, - pub progress_update_url: String, - pub project_image_url: String, - pub category: String, - pub amount_donated: u64, - pub amount_withdrawn: u64, + pub admin: Pubkey, + pub name: String, + pub description: String, + pub target_amount: u64, + pub project_url: String, + pub progress_update_url: String, + pub project_image_url: String, + pub category: String, + pub amount_donated: u64, + pub amount_withdrawn: u64, } From 8b77b4807f0b5acfca8c26fccf72e94ac9551f6e Mon Sep 17 00:00:00 2001 From: Aspirin Date: Thu, 29 Feb 2024 13:29:52 +0100 Subject: [PATCH 2/2] =?UTF-8?q?feat=20:=20add=20get=20campaign=20feature?= =?UTF-8?q?=20=F0=9F=A6=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 13 ++++++++++++- public/system-design.png | Bin 1048300 -> 1051447 bytes 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index aa068c1..cf55bbc 100644 --- a/README.md +++ b/README.md @@ -95,4 +95,15 @@ category : "which type of campaign" - Transactional data and campaign details recorded on the Solana blockchain are immutable and tamper-proof, providing a permanent and verifiable record of fundraising activities. Immutable records enhance auditability, mitigating the risk of fraud or data manipulation and fostering trust among stakeholders. -## +## 🗂️ Folder Structure. + +```sh +CrowdFund/ +├── programs/smart-contracts/ +├ ├── src/ +├ ├── lib.rs (contains smart contracts code) +├── tests/ + ├── smart-contracts.ts (contains test cases for smart contracts) + + +``` diff --git a/public/system-design.png b/public/system-design.png index daaca263d75dc7f3fd8c4579f66bfd9656609117..c292bd3212ae4590001be86790cc08bd9b4ee6ce 100644 GIT binary patch delta 18906 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

lziU`x<3B-yI_eFSPQTs{gKGflDCJ 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