솔리디티의 기본 문법에 대해 알아보겠습니다.
1. SPDX License Identifier
- 스마트 컨트랙트에 대한 신뢰를 높이고, 저작권 문제를 해소하기 위한 SPDX License Identifier를 솔리디티 코드의 최상단에 명시해줍니다.
// SPDX-License-Identifier: MIT
2. Pragma
- pragma 키워드는 컴파일러 버전을 명시할 때 사용
- 모든 소스 코드 파일에 포함되어 있어야 합니다.
pragma solidity 0.8.7; // 0.8.7 버전을 사용
// pragma solidity ^0.8.7; // 0.8.7 이상의 버전을 사용
3. import
import {FILE_NAME};
import * as {ALIAS_NAME} from {FILE_NAME}; // 임포트 하는 파일을 ALIAS_NAME으로 사용
import {FILE_NAME} as {ALIAS_NAME};
import {symbol1 as alias, symbol2} from {FILE_NAME}; // 파일의 일부분만 임포트
4. 컨트랙트 구조
- 상태 변수 (state variables)
- 함수 (functions)
- 함수 제어자 (function modifiers)
- 에러 (errors)
- 상속 (inheritance)
- 열거형 (enum types)
5. 상태 변수
- 상태 변수는 값이 컨트랙트 스토리지에 영구적으로 저장되는 변수
- 데이터타입 변수명; 과 같은 형식으로 변수를 선언합니다.
- 상태 변수에는 값형 데이터 타입과 참조형 데어터 타입이 있습니다.
pragma solidity ^0.8.7;
contract SimpleStorage {
uint storedData; // 상태 변수 선언
uint storedData1 = 1; // 상태 변수 선언 및 초기화
(1) 값형 데이터 타입
- bool
- uint, int
- 고정 바이트 배열
- 주소
bool
bool isTrue = true;
bool isFalse = false;
정수형
- uint, int 뒤에 8의 배수 숫자를 붙여서 변수의 크기를 비트 단위로 지정할 수 있습니다.
uint thisIsUnsignedInteger = 123;
int thisIsiInteger = -123;
int8 a = -40;
uint16 b = 290;
고정 바이트 배열
- bytes1 ~ bytes32까지의 고정된 크기 배열을 선언
bytes3 alphabets = 'abc';
alphabet[0] // 'a'
alphabet[1] // 'b'
alphabet[2] // 'c'
주소
- 주소 객체는 '0x'로 시작
- 최대 40자리의 16진수로 구성되는 문자열을 값으로 가짐
- 크기는 20 바이트
- 주로 계정의 잔액을 반환하는 balance() 함수와 이더를 계정으로 전송하는 transfer() 함수에 사용
address thisIsAddress = 0x64nf2563A58026aA5125140b7d97e1580148AB8A;
- 0.8 버전부터 address 형식은 송금이 불가능한 주소 값입니다.
- 스마트 컨트랙트에서 특정 주소 값으로 이더릂 송금하기 위해서는 address payable 형식을 사용
- address payable 형식에는 이더 송금을 위한 transfer()와 send() 함수가 내장
- address payable 형식은 address 형식 데이터를 payable() 함수에 인자로 담아 만듭니다.
address addr1;
address payable p_addr1 = payable(addr1);
- int 또는 bytes 형식의 데이터를 address payable로 바꾸기 위해서는 address()를 사용하여 주소 형식 데이터로 만드록, payable() 함수를 사용해서 address payable 형식으로 바꿀 수 있습니다.
uint160 num;
address addr = address(num);
address payable p_addr = payable(addr);