Skip to content

feat(week-06): MilestoneFunding - 마일스톤 크라우드펀딩 dApp#108

Open
HoonilP wants to merge 1 commit into
Bay-17th:mainfrom
HoonilP:gownj/week-06
Open

feat(week-06): MilestoneFunding - 마일스톤 크라우드펀딩 dApp#108
HoonilP wants to merge 1 commit into
Bay-17th:mainfrom
HoonilP:gownj/week-06

Conversation

@HoonilP

@HoonilP HoonilP commented Apr 13, 2026

Copy link
Copy Markdown

프로젝트: MilestoneFunding

후원자 투표로 자금을 단계별 릴리즈하는 크라우드펀딩 dApp

구현 내용

Smart Contract

  • MilestoneFunding.sol: 마일스톤 기반 크라우드펀딩 (CEI 패턴, 재진입 방지)
  • MilestoneFundingFactory.sol: 프로젝트 생성 팩토리
  • 크리에이터 자기 후원 방지, 기여금 비례 투표, 비례 환불
  • 9/9 Foundry 테스트 통과

Frontend

  • Next.js 16 + wagmi + RainbowKit + Tailwind CSS
  • 프로젝트 목록 / 생성 / 상세 페이지
  • 역할 배너, 카운트다운 타이머, 투표 현황 바

Deployment

Quiz

  • quiz-06-solution.md 10문제 답변 완료

Technical Checklist

Smart Contract

  • Solidity 0.8.26 사용
  • 상태 변수 8개 (creator, goal, deadline, totalFunded, totalReleased, state, milestones, contributions)
  • public/external 함수 6개 (fund, submitMilestone, vote, finalizeMilestone, claimRefund + view)
  • 모든 상태 변경 함수에 이벤트 발생
  • Foundry 테스트 9개 작성
  • CEI 패턴 적용

Frontend

  • Next.js App Router 사용
  • wagmi + RainbowKit으로 지갑 연결
  • 컨트랙트 상태 읽기 (useReadContract)
  • 컨트랙트 상태 쓰기 (useWriteContract)
  • 트랜잭션 대기 상태 표시 (pending indicator)
  • 에러 처리 및 사용자 피드백

Deployment

  • Sepolia 테스트넷에 배포
  • 배포된 컨트랙트 주소 README에 기재

배운 점

  • Factory 패턴으로 여러 인스턴스를 관리하는 설계
  • CEI 패턴과 재진입 방지의 실전 적용
  • wagmi + RainbowKit으로 풀스택 dApp 구축

어려웠던 점

  • 재진입 공격 시 receive()의 revert 전파 처리
  • 비례 환불 계산에서 정수 나눗셈 순서에 따른 정밀도 문제
  • 프론트엔드에서 트랜잭션 후 데이터 refetch 타이밍

Smart Contract:
- MilestoneFunding.sol: 마일스톤 기반 크라우드펀딩 (CEI 패턴)
- MilestoneFundingFactory.sol: 프로젝트 생성 팩토리
- 크리에이터 자기 후원 방지, 비례 환불, 재진입 방지
- 9/9 Foundry 테스트 통과

Frontend:
- Next.js 16 + wagmi + RainbowKit
- 프로젝트 목록 / 생성 / 상세 3개 페이지
- 역할 배너, 카운트다운, 투표 현황 UI

Deployment:
- Sepolia Factory: 0x63c5ED29c8BF61277542acB5f79672505382062d

Quiz:
- quiz-06-solution.md 10문제 답변 완료
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant