솔리디티 이해하기

허정·2022년 10월 17일
0

솔리디티의 기본 문법에 대해 알아보겠습니다.

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

  • 파일을 임포트 하는 방식은 JS와 동일
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); 

0개의 댓글