Skip to content

Dotcom07/week 03#50

Open
dotcom07 wants to merge 8 commits intoBay-17th:mainfrom
dotcom07:dotcom07/week-03
Open

Dotcom07/week 03#50
dotcom07 wants to merge 8 commits intoBay-17th:mainfrom
dotcom07:dotcom07/week-03

Conversation

@dotcom07
Copy link

@dotcom07 dotcom07 commented Mar 4, 2026

과제 제출 정보

주차: Week 03

과제 유형:

  • [V] 이론 (Theory Quiz)
  • [V] 개발 (Dev Assignment)

구현 내용

  • 스마트 컨트랙트 보안 패턴 중 CEI 패턴과 ReentrancyGuard 라이브러리를 구현했습니다.

배운 점 (What I Learned)

이번 주에 배운 것 (2-3가지)

  1. 스마트 컨트랙트를 구현할 때 보안 패턴이 있다는 점을 처음 알게 되었습니다.
  2. OS에서 배운 뮤텍스가 보안을 위해서도 쓰인다는 것을 알게 되었습니다.

어려웠던 점과 해결 방법

어려웠던 점:

  • forge install OpenZeppelin/openzeppelin-contracts --no-commit 실행 시, 현재 설치된 forge 버전에서 --no-commit 옵션을 지원하지 않아 의존성 설치가 바로 안 되었습니다.
  • 최신 openzeppelin-contracts가 pragma ^0.8.27 파일을 포함하고 있어, 프로젝트 설정(solc 0.8.26)과 버전 충돌이 발생했습니다.
  • OpenZeppelin 내부 Certora harness 파일까지 함께 컴파일되면서 추가 import 에러가 발생해 테스트가 중단되었습니다.

해결 방법:

  • openzeppelin-contracts를 프로젝트 컴파일러와 호환되는 v4.9.6으로 고정했습니다.
  • 불필요한 라이브러리 harness 컴파일을 피하기 위해 foundry.toml에 skip = ["Harness.sol"] 추가했습니다.
  • VaultSecure.sol에서 OpenZeppelin v4 경로(openzeppelin/security/ReentrancyGuard.sol)에 맞게 import를 수정하고, deposit/withdraw 로직을 테스트 요구사항에 맞게 구현했습니다.
  • 테스트가 의도대로 재현되도록 Vault.sol의 취약 지점에 unchecked를 적용했습니다. [balances[msg.sender] -= amount에서 0 밑으로 내려가려 하면 자동 revert가 되어서 테스트가 실패하는 것 같습니다!]

질문 사항


체크리스트

테스트

  • [V] forge build 성공
  • [V] forge test 모든 테스트 통과

제출 규칙

  • [V] 브랜치명이 {username}/week-{XX} 형식
  • [V] .env 파일이 커밋에 포함되지 않음
  • [V] 커밋 메시지가 규칙을 따름

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