수업 1일반적인 컨트랙트 패턴: Ownable, Pausable, ReentrancyGuard, Pull over Push 결제, Checks-Effects-Interactions 패턴안전성과 유지보수성을 향상시키는 기초적인 스마트 컨트랙트 패턴을 탐구합니다. Ownable, Pausable, ReentrancyGuard를 구현하고 실제 결제 흐름에서 Pull over Push와 Checks-Effects-Interactions를 적용합니다.
Ownable 접근 제어 구현 및 사용Pausable 컨트랙트와 비상 정지ReentrancyGuard와 재진입 공격 방어Pull over Push 결제 흐름 설계Checks-Effects-Interactions 모범 사례수업 2Solidity 0.8+의 안전한 수학 및 오버플로우 보호: 내장 체크 vs 명시적 라이브러리(OpenZeppelin SafeMath 역사)Solidity 0.8+의 내장 오버플로우 체크가 산술 안전성을 어떻게 변화시켰는지 연구합니다. 이전 SafeMath 스타일 라이브러리와 현대 패턴을 비교하고, 가스 효율적인 산술 연산에 unchecked 블록을 안전하게 사용할 때를 배웁니다.
정수 오버플로우 및 언더플로우 기초Solidity 0.8+의 내장 산술 체크구버전 SafeMath 라이브러리와 마이그레이션가스를 위한 안전한 unchecked 블록 사용산술 엣지 케이스 및 한계 테스트수업 3상태 변수, storage vs memory, 이벤트, 수정자, 오류 처리(require, revert, assert, 커스텀 오류)상태 변수, storage, memory, calldata를 사용하여 Solidity가 데이터를 저장하고 접근하는 방법을 마스터합니다. 이벤트를 발생시키고, 재사용 가능한 수정자를 작성하며, 명확한 오류 처리를 위해 require, revert, assert, 커스텀 오류를 적용합니다.
상태 변수와 스토리지 슬롯Storage vs memory vs calldata 사용유용한 이벤트 설계 및 발생재사용 가능하고 안전한 수정자 작성Require, revert, assert, 커스텀 오류수업 4함수 가시성 및 변경 가능성: public, external, internal, private; view, pure, payable함수 가시성과 변경 가능성이 보안, 가스, 사용성에 미치는 영향을 명확히 합니다. public, external, internal, private를 언제 사용해야 하는지, view, pure, payable이 상태 변경과 가치 전송에 어떻게 영향을 미치는지 배웁니다.
Public vs external 함수 장단점캡슐화를 위한 internal 및 private읽기 전용 로직을 위한 view 및 pureETH 전송을 위한 payable 함수명확하고 안전한 API 설계수업 5입금/출금 회계 설계: mapping(address => uint256) 잔액, 입금/출금 이벤트, 단일 토큰 vs 다중 토큰 볼트 처리매핑, 이벤트, 토큰 인터페이스를 사용하여 안전한 입금 및 출금 흐름을 설계하는 방법을 배웁니다. 단일 토큰 및 다중 토큰 볼트를 비교하고, 실패한 전송 및 예상치 못한 토큰 동작과 같은 엣지 케이스를 처리합니다.
매핑 잔액과 회계 불변량입금 및 출금을 위한 이벤트 발생단일 토큰 볼트 설계 및 인터페이스다중 토큰 볼트와 토큰 식별자실패한 전송 및 토큰 특이사항 처리수업 6스마트 컨트랙트 테스트: 단위 테스트 개념, 픽스처, ERC-20 토큰 모킹, 테스트 구조(arrange-act-assert)구조화된 접근 방식으로 스마트 컨트랙트를 테스트하는 방법을 배웁니다. 단위 테스트를 작성하고, ERC-20 토큰을 위한 픽스처와 모크를 사용하며, arrange-act-assert를 따르고, 엣지 케이스, revert, 이벤트 기대를 다룹니다.
테스트 프레임워크 및 프로젝트 설정Arrange-Act-Assert 테스트 구조반복 가능한 상태를 위한 픽스처 사용ERC-20 토큰 및 동작 모킹Revert, 이벤트, 엣지 케이스 테스트수업 7Solidity 언어 기초: 구문, 타입, 가시성, 상속, 컴파일러 프라그마(0.8.x 특성)Solidity 구문, 타입, 가시성 규칙에 대한 탄탄한 이해를 구축합니다. 상속, 인터페이스, 컴파일러 프라그마, 커스텀 오류와 개선된 타입 안전성과 같은 0.8.x 특성을 탐구하여 현대 스마트 컨트랙트 개발을 합니다.
소스 파일, 컨트랙트, 기본 구문값 타입, 참조 타입, 배열함수 및 상태 변수 가시성상속, 인터페이스, 추상 컨트랙트컴파일러 프라그마 및 0.8.x 언어 변경수업 8컨트랙트 업그레이드 가능성 기초와 장단점: 프록시 패턴(transparent, UUPS) 및 간단한 볼트의 업그레이드 회피 시기프록시 패턴을 사용하여 컨트랙트를 언제, 어떻게 업그레이드할지 이해합니다. transparent와 UUPS 프록시, 스토리지 레이아웃 제약, 거버넌스 위험을 비교하고, 간단한 볼트가 업그레이드 가능성 없이 더 안전한 이유를 확인합니다.
컨트랙트 업그레이드 이유와 회피 시기Transparent 프록시 아키텍처와 역할UUPS 프록시 패턴과 업그레이드 함수스토리지 레이아웃 호환성 및 함정업그레이드의 보안 및 거버넌스 위험수업 9가스 최적화 기초: 스토리지 레이아웃, 패킹, 외부 호출 최소화, calldata 사용Solidity 컨트랙트에 대한 실전 가스 최적화 기술을 배웁니다. 스토리지 레이아웃과 패킹을 분석하고, 비용이 많이 드는 외부 호출을 줄이며, calldata를 활용하고, 가스 사용량을 측정하여 안전한 마이크로 최적화를 안내합니다.
가스 비용 및 환급 이해스토리지 레이아웃과 변수 패킹외부 및 크로스 컨트랙트 호출 최소화저렴한 읽기 전용 입력을 위한 calldata 사용가스 사용량 측정 및 벤치마킹수업 10ERC-20 토큰 표준 심층 탐구: 인터페이스(IERC20), 허용량, approve/transferFrom 의미론, 반환값 처리 및 비표준 토큰IERC20 인터페이스, 잔액, 허용량, approve/transferFrom 흐름에 초점을 맞춰 ERC-20 표준을 깊이 탐구합니다. 반환값 처리, 비표준 토큰, 프로덕션 컨트랙트의 안전한 상호작용 패턴을 배웁니다.
IERC20 인터페이스와 필수 함수잔액, totalSupply, decimals 처리Approve 및 transferFrom 허용량 워크플로우비표준 ERC-20 토큰 처리헬퍼 라이브러리를 사용한 안전한 ERC-20 상호작용