마스터링 리버스 엔지니어링
28,000원
고급
도서 소개
개발 경험이 없어도 쉽게 블록체인과 솔리디티를 이해할 수 있습니다!
솔리디티는 스마트 컨트랙트를 구현하는 언어이며, 스마트 컨트랙트는 블록체인에서 작동하는 프로그램이다. 《솔리디티 프로그래밍 완벽 가이드》는 블록체인의 기본적인 개념과 솔리디티로 스마트 컨트랙트를 개발하는 법을 자세히 알려준다.
이 책에서는 웹 브라우저 기반의 통합 개발 환경인 리믹스(Remix)를 이용해 솔리디티를 배운다. 즉, 솔리디티를 설치하거나 따로 추가적으로 설정할 필요가 없어 솔리디티를 간편하게 배울 수 있다. 최대한 현실에서 볼 수 있는 예를 들어서 솔리디티의 주요 개념을 설명하므로 개발 경험이 없어도 누구나 쉽게 이해할 수 있다. 각 개념에 관한 실습 예제를 제공하며, 각 예제마다 자세한 설명이 덧붙여져 있다. 결론적으로 실습 예제를 통해서 언제, 어떤 식으로 스마트 컨트랙트를 작성하는지 터득할 수 있다.
이 책을 읽은 후에는 스마트 컨트랙트를 작성 및 배포할 수 있으며, 더 나아가서 이더리움 암호화폐 지갑인 메타마스크를 통해 작성한 스마트 컨트랙트를 테스트넷 및 메인넷에 배포할 수 있다.
★ 이 책에서 다루는 내용 ★
- 블록체인의 작동 방식
- 솔리디티와 스마트 컨트랙트의 기본 개념
- 리믹스 사용 방법
- 스마트 컨트랙트의 기본 구조
- 솔리디티의 주요 문법
- 메타마스크 사용 및 테스트넷 배포
도서 상세 이미지

저자 소개
조대환
영국에 위치한 Newcastle University에서 Advanced Computer Science 석사 수료 이후 유튜브 'D_One'으로 활동을 시작했습니다. 유튜브 채널에서 '솔리디티 깨부수기'와 같은 솔리디티 관련 강의를 공유하고 있습니다. 현재는 NFT 관련 프로젝트에 참여하고 있습니다.
목차
- ▣ 1장: 블록체인, 스마트 컨트랙트와 솔리디
- 1.1 블록체인이란
- ___1.1.1 블록체인 구조
- ___1.1.2 블록체인 특징
- 1.2 이더리움과 스마트 컨트랙트
- ___1.2.1 이더리움
- ___1.2.2 스마트 컨트랙트
- ___1.2.3 이더와 가스
- ___1.2.4 이더리움 네트워크
- 1.2.5 NFT
- 1.2.6 솔리디티
- ▣ 2장: 리믹스로 솔리디티 시작하기
- 2.1 리믹스 둘러보기
- 2.2 리믹스로 스마트 컨트랙트 작성, 컴파일, 배포
- ___2.2.1 워크스페이스 만들기
- ___2.2.2 불필요한 폴더와 파일 삭제
- ___2.2.3 실습 폴더와 파일 만들기
- ___2.2.4 코드 작성
- ___2.2.5 컴파일과 배포
- 2.3 Remixd로 스마트 컨트랙트를 저장하기
- ___2.3.1 Node.js 설치
- ___2.3.2 Remixd 설치
- ___2.3.3 연동할 폴더를 로컬 서버에 호스팅
- ___2.3.4 스마트 컨트랙트를 파일로 저장
- 2.4 스마트 컨트랙트의 기본 구조, 자료형, 연산
- ___2.4.1 스마트 컨트랙트의 기본 구조
- ___2.4.2 변수와 자료형
- ___2.4.3 연산자
- ___2.4.4 상수
- 2.5 개념 체크
- 2.6 연습 문제
- ▣ 3장: 가시성 지정자와 함수
- 3.1 가시성 지정자
- 3.2 함수의 개념과 정의 방법
- ___3.2.1 함수의 개념
- ___3.2.2 함수 정의
- 3.3 기본 모디파이어
- ___3.3.1 pure와 view의 비교
- ___3.3.2 함수에 모디파이어를 적용하는 방법
- 3.4 함수와 참조 타입
- 3.5 함수와 변수
- 3.6 함수와 가시성 지정자
- 3.7 개념 체크
- 3.8 연습 문제
- ▣ 4장: 조건문과 반복문
- 4.1 조건문
- ___4.1.1 조건문의 구조
- ___4.1.2 if 문의 예
- ___4.1.3 if와 else를 사용하는 조건문의 예
- ___4.1.4 if, else if, else를 사용하는 조건문의 예
- ___4.1.5 조건문 구조에 따른 차이
- 4.2 반복문
- ___4.2.1 3가지 반복문 구조
- ___4.2.2 for 문의 예
- ___4.2.3 while 문의 예
- ___4.2.4 do-while 문의 예
- 4.3 반복문 응용
- ___4.3.1 반복문과 조건문의 조합
- ___4.3.2 중첩 반복문
- ___4.3.3 반복문의 continue와 break
- 4.4 개념 체크
- 4.5 연습 문제
- ▣ 5장: 매핑, 배열, 구조체
- 5.1 매핑
- ___5.1.1 매핑 구문
- ___5.1.2 매핑에 키와 값을 추가
- ___5.1.3 매핑의 키와 값을 삭제
- 5.2 배열
- ___5.2.1 배열의 구조
- ___5.2.2 배열의 인덱스에 대응하는 값을 구하기
- ___5.2.3 배열에 값을 추가하고 변경
- ___5.2.4 배열의 값을 삭제
- ___5.2.5 순차 검색 알고리즘
- 5.3 구조체
- ___5.3.1 구조체 정의 및 반환의 예
- ___5.3.2 구조체를 적용한 배열과 매핑의 예
- 5.4 참조 타입의 데이터 저장 영역
- ___5.4.1 값 타입과 참조 타입의 데이터 저장 방법
- ___5.4.2 memory에 저장된 변수를 다른 memory 변수에 대입
- ___5.4.3 storage에 저장된 변수를 local storage 변수에 넣기
- ___5.4.4 storage에 저장된 변수를 memory 변수에 넣기
- ___5.4.5 그 외의 참조 타입 storage가 포함된 관계
- 5.5 개념 체크
- 5.6 연습 문제
- ▣ 6장: 객체 지향 프로그래밍
- 6.1 객체 지향 기본
- ___6.1.1 이벤트
- ___6.1.2 생성자
- ___6.1.3 객체 지향
- ___6.1.4 상속
- ___6.1.5 캡슐화
- 6.2 객체 지향 고급
- ___6.2.1 다형성
- ___6.2.2 다중 상속
- ___6.2.3 추상화
- 6.3 개념 체크
- 6.4 연습 문제
- ▣ 7장: 오류 및 예외 처리
- 7.1 assert/revert/require
- ___7.1.1 컴파일러 버전에 따른 assert 가스비 비교
- ___7.1.2 revert와 require 정의 방법
- 7.2 try/catch
- ___7.2.1 try/catch 구문
- ___7.2.2 try/catch 정의 방법
- ___7.2.3 인스턴스화에 try/catch 적용
- ___7.2.4 외부 함수에 try/catch 적용
- ___7.2.5 try/catch 블록의 try 블록에서 오류가 발생할 경우
- 7.3 개념 체크
- 7.4 연습 문제
- ▣ 8장: 모디파이어/이넘/임포트/라이브러리
- 8.1 모디파이어
- ___8.1.1 모디파이어의 개념과 정의 방법
- ___8.1.2 모디파이어 정의 예시
- ___8.1.3 모디파이어의 함수 실행 순서
- 8.2 이넘
- ___8.2.1 이넘의 정의 예시
- 8.3 임포트
- ___8.3.1 임포트 예제
- ___8.3.2 상위 폴더에 있는 파일을 임포트
- 8.4 라이브러리
- ___8.4.1 라이브러리의 특징
- ___8.4.2 라이브러리 정의
- ___8.4.3 라이브러리 사용
- ___8.4.4 실습: 오버플로를 막는 라이브러리
- 8.5 개념 체크
- 8.6 연습 문제
- ▣ 9장: 이더 송수신
- 9.1 이더 송수신 기본 개념: address/payable/msg.sender/msg.value
- ___9.1.1 address 자료형
- ___9.1.2 payable 키워드
- ___9.1.3 전역 변수 msg.sender와 msg.value
- 9.2 이더를 보내는 3가지 함수: send/call/transfer
- 9.3 함수 fallback과 receive
- ___9.3.1 함수 fallback의 기능
- ___9.3.2 솔리디티 버전 0.6 미만 fallback
- ___9.3.3 솔리디티 버전 0.6 이상 fallback과 receive
- 9.4 함수 call과 delegatecall
- ___9.4.1 함수 call
- ___9.4.2 함수 delegatecall
- 9.5 개념 체크
- 9.6 연습 문제
- ▣ 10장: 메타마스크를 활용한 배포
- 10.1 메타마스크
- ___10.1.1 메타마스크 설치
- ___10.1.2 메타마스크 테스트넷 추가
- ___10.1.3 메타마스크 계정 추가
- ___10.1.4 Rinkeby 테스트넷 이더 받기
- ___10.1.5 이더 보내기
- 10.2 블록 탐색기
- 10.3 스마트 컨트랙트 Random 게임 배포
- ___10.3.1 Random 게임 설명
- ___10.3.2 Random 게임 스마트 컨트랙트 작성
- ___10.3.3 컴파일
- ___10.3.4 배포
- ___10.3.5 이더스캔에서 기록 찾기
- ▣ 부록
- DGIT로 깃허브에 스마트 컨트랙트 파일 저장
- 진법 변환
- 전역 변수
- 함수 스타일
- ___길이가 짧은 함수
- ___길이가 긴 함수
- 주소의 내장 변수 및 함수
예제 코드
- GitHub 저장소: https://github.com/wikibook/solidity
- ZIP 형식으로 다운로드: https://github.com/wikibook/solidity/archive/refs/heads/main.zip
정오표
-
33쪽, 본문 9번째 줄
이와 반대로 동적 크기 바이트 배열은 bytes라고 명시하며, 최대 바이트 크기인 32바이트까지 자유롭게 저장할 수 있다.
==>
이와 반대로 동적 크기 바이트 배열은 bytes라고 명시하며, 동적 크기 바이트 배열은 고정 크기 바이트 배열과 다르게 특정한 사이즈가 미리 정의되지 않는다. 동적 크기 바이트는 사이즈를 줄이거나 늘릴 수 있으며, 32바이트 이상으로 저장이 가능하다.
-
33쪽, 본문 15번째 줄
또한, UTF-8의 크기가 동적 크기 바이트 배열의 최대 크기인 bytes32보다 크다.
==>
그러나 문자열은 배열의 기본적인 기능인 길이와 인덱스를 제공하지 않는다.
-
172쪽, 1번 정답
- 아니다
==>
- 이다
-
179쪽, 그림 6.2
MyEvent 하단의 '매개변수명'을 '이벤트'로 변경
-
180쪽, 그림 6.4
MyEvent 하단의 '매개변수명'을 '이벤트'로 변경
-
347쪽, 본문 4번째 줄
1 ether를 보낸다고 가정했을 때
1018인==>
1 ether를 보낸다고 가정했을 때 1018인