입문 과정 종합 테스트
입문 과정의 마지막 관문 입니다. 지금까지는 강의가 단계별 힌트와 starter 코드를 함께 줬지만, 이번에는 투표 시스템을 응용한 설문(Poll) 컨트랙트를 처음부터 직접 완성해야 합니다. 새로운 문법은 없습니다.
이름만 바뀐 같은 구조
Poll 컨트랙트는 13강에서 완성한 투표 컨트랙트와 구조가 완전히 동일 합니다. 다만 도메인 용어가 투표(voting)에서 설문(poll)으로 바뀌면서 식별자 이름이 달라졌을 뿐입니다.
- 후보자
Candidate→ 선택지Option(필드:string label,uint256 count) candidates배열 →options배열hasVoted매핑 →voted매핑owner→admin,onlyOwner→onlyAdminVoted이벤트 →VoteCast이벤트vote함수 →castVote,getVoteCount→results
스스로 확인할 항목
구현하면서 다음을 모두 갖췄는지 확인하세요. struct + array 로 선택지를 담았는가,
mapping 으로 중복 투표를 막았는가, constructor 에서 admin 을 설정했는가, modifier 로
권한을 제한했는가, require 로 1인 1표를 강제했는가, event 를 발행했는가, view 함수로 결과를
반환하는가.
해야 할 일:
Poll컨트랙트를 선언하세요.Option구조체(string label,uint256 count)와Option[] public options배열을 선언하세요.mapping(address => bool) public voted매핑과address public admin상태 변수를 선언하세요.- 생성자에서
admin = msg.sender;로 설정하세요. onlyAdminmodifier 를 만들고,addOption(string memory label)에 적용해 옵션을 추가하세요.castVote(uint256 index)함수: 아직 투표하지 않은 주소만 통과(require(!voted[msg.sender], ...)), 해당 옵션의count를 1 늘리고,voted[msg.sender] = true;로 기록한 뒤VoteCast이벤트를 발행하세요.VoteCast(address indexed voter, uint256 index)이벤트를 선언하세요.results(uint256 index)view 함수: 해당 옵션의count를 반환하세요.
막히면 13강에서 완성한 컨트랙트를 떠올려 보세요. 이름만 바꿔 옮기면 됩니다.
완성 후 Run 으로 모든 조건을 통과하는지 확인하세요.