WEEK 5

스마트 계약 기초 - 실습 가이드

대전대학교 대학원 | 블록체인 기술 특론 | 연삼흠 교수 | WIA-FIN-007

실습 진행률

0 / 20 완료
1

개발 환경 설정

Remix IDE와 MetaMask를 설정합니다.

도움말

Remix IDE는 웹 기반이므로 별도 설치가 필요 없습니다. 인터넷 연결만 되면 어디서든 사용 가능합니다.

2

새 파일 생성

참고

Solidity 파일 확장자는 반드시 .sol이어야 합니다. 파일명은 계약명과 일치시키는 것이 관례입니다.

3

Hello World 계약 코딩

아래 코드를 HelloWorld.sol에 입력합니다. 직접 타이핑하면서 각 줄의 의미를 이해하세요.

// SPDX-License-Identifier: MIT pragma solidity ^0.8.19; contract HelloWorld { // ===== 상태 변수 ===== string private greeting; address public owner; uint256 public greetingCount; // ===== 이벤트 ===== event GreetingChanged( address indexed changer, string newGreeting, uint256 timestamp ); // ===== 생성자 ===== constructor(string memory _greeting) { greeting = _greeting; owner = msg.sender; greetingCount = 0; } // ===== 함수 ===== // 인사말 조회 (view - 가스비 없음) function getGreeting() public view returns (string memory) { return greeting; } // 인사말 변경 (소유자만 가능) function setGreeting(string memory _newGreeting) public { require(msg.sender == owner, "Only owner can change greeting"); require(bytes(_newGreeting).length > 0, "Greeting cannot be empty"); greeting = _newGreeting; greetingCount++; emit GreetingChanged(msg.sender, _newGreeting, block.timestamp); } // 소유권 이전 function transferOwnership(address _newOwner) public { require(msg.sender == owner, "Only owner"); require(_newOwner != address(0), "Invalid address"); owner = _newOwner; } }

코드 핵심 설명

  • pragma solidity ^0.8.19 - 컴파일러 버전 0.8.19 이상 지정
  • string private greeting - 외부 계약에서 직접 접근 불가한 문자열
  • msg.sender - 현재 함수를 호출한 지갑 주소
  • require() - 조건이 false이면 트랜잭션 취소
  • emit - 이벤트 발생, 블록체인 로그에 기록
4

컴파일

컴파일 에러 해결법

에러 발생 시: (1) 세미콜론(;) 누락 확인 (2) 중괄호 {} 짝 확인 (3) pragma 버전과 컴파일러 버전 일치 확인 (4) 오타 확인

5

배포

6

함수 호출 테스트

배포된 계약의 함수를 호출하여 정상 동작을 확인합니다.

실습 완료

모든 테스트를 통과했다면 스마트 계약의 기본 구조, 함수 호출, 접근 제어를 이해한 것입니다.

WIA-FIN-007 시뮬레이터에서 추가 실습