이 프로젝트는 동아리 운영을 온체인에서 관리하기 위한 서비스입니다.
기수별 클럽 상태, 멤버 등록, 출석 관리, 그리고 기수 전환 절차를 Move 스마트컨트랙트로 정의하고,
프론트엔드(React/TypeScript)에서 회장/운영진/일반 부원이 각 역할에 맞는 업무를 수행합니다.
핵심 목표는 아래 세 가지입니다.
-
기수별 동아리 상태의 단일 소스화
BlockBlockRegistry가 현재 기수와 클럽 ID를 기준점으로 제공하고, 모든 레지스트리는 이 기준을 따라갑니다. -
운영 프로세스의 명시적 단계화
멤버 등록 → 출석 관리 → 시트 저장 → 기수 종료/전환을 레지스트리 단위의 단계로 분리했습니다. -
프론트와 온체인의 지속 동기화
레지스트리 ID는 이벤트 기반으로 갱신되어, 새로고침 시에도 최신 상태로 복구됩니다.
-
클럽 생성 및 상태 보관
BlockBlockRegistry가 현재 기수/클럽 ID를 관리합니다. -
멤버 등록 단계
회장이MemberRegistry를 생성 → 부원이MemberInfo를 제출 → 회장이 검토 후 클럽에 반영합니다. -
출석 관리 단계
회장이AttendanceRegistry를 생성 → 부원이 출석 등록 → 마감 후 지각/결석/병결 분류 → 출석 시트 저장. -
기수 전환 단계
회장단이 현재 클럽 종료 투표 → 다음 회장 지정 → 기수 전환 레지스트리 생성 및 투표 → 다음 기수 클럽 생성.
핵심 오브젝트와 역할 등록 로직을 담습니다.
BlockBlockYonsei: 동아리 상징 (Immutable)BlockBlockRegistry: 현재/이전 기수 및 클럽 상태 저장BlockBlockClub: 특정 기수 클럽 오브젝트- 역할 등록:
register_vice_president,register_treasurer,register_planning_team_member,register_marketing_team_member - 출석 시트 저장:
store_attendance_sheet_to_blockblockclub
멤버 정보 생성용 모듈입니다.
MemberInfo: 이름/전공/주소/기수 정보 포함create_member_info,create_member_info_by_president_or_vice_president
멤버 등록 요청을 수집하고, 검증된 주소를 클럽에 반영합니다.
MemberRegistry에club_id포함- 생성/삭제 이벤트 emit (프론트에서 ID 동기화에 사용)
출석 등록/마감/분류를 담당합니다.
AttendanceRegistry에club_id포함- 생성/삭제 이벤트 emit
- 출석 시트로 변환 후 클럽에 저장
클럽 종료와 기수 전환을 담당합니다.
ClosingCurrentClubVoteRegistry: 현재 클럽 종료 투표NextTermRegistry: 다음 기수 전환 투표- 생성/삭제 이벤트 emit
- 현재 클럽 역할 요약
- 출석 시트 목록(날짜/세션 기준, 접기/펼치기)
- 멤버/출석 레지스트리 생성 등 빠른 작업
- 부원이 멤버 등록 요청 제출
- 회장 검토 후 클럽 반영
- 운영진 등록(부회장/총무/기획/홍보)
- 회장이 출석 레지스트리 생성
- 부원이 출석 등록(이름/전공 포함)
- 회장이 마감 후 지각/결석/병결 분류
- 출석 시트 저장
- 현재 클럽 종료 투표/종료
- 기수 전환 레지스트리 생성 및 투표
- 다음 기수 클럽 생성
프론트는 queryEvents를 이용해 레지스트리 ID를 최신으로 유지합니다.
- 대상:
MemberRegistry,AttendanceRegistry,NextTermRegistry,ClosingCurrentClubVoteRegistry BlockBlockRegistry.current_club기준으로club_id필터링- 삭제 이벤트 감지 시 해당 ID를 자동 초기화
src/constants.ts에 최신 패키지 및 오브젝트 ID가 반영됩니다.