본문 바로가기
학교 공부/블록체인

[Ethereum] solidity언어 문법

by 그적 2021. 6. 11.

Solidity Language

: smart contract 과정 중 EVM에서 byte코드를 생성하고, smart contract을 만들기 위한 가장 많이 쓰이는 언어이다.

 

 

1) solidity 버전 선언

 : 두 가지 중 마음에 드는 걸 사용하자.

- pragma solidity >= 0.4.16 <0.9.0             // 0.4.16 버전 이상, 0.9.0 버전 이하를 통해서 실행이 됨.

- pragma solidity ^0.6.0                         // 최소 0.6.0 이상의 버전으로 컴파일되어야 해. (0.7.0은 X)

 

 

2) 데이터 타입 종류

- boolean
- integer
- fixed point : fixed, ufixed(fixed32x2 - 전체가 32비트인 실수, 소수점 2자리까지 표현)
- address : 20바이트 주소
- byte array(fixed) : 1-32까지 고정된 사이즈로 만들 수 있음.
- byte array(dynamic) : bytes, string
- Enum
- Arrays
- Struct
- Mapping
- Time units : 10 minutes
- Ether unis : wei, Szabo, ether

 

 

3) 사전에 선언된 이름들

 3-1) 사전에 선언된 변수명

- msg object : msg.sender(=address) / msg.value(=ether) / msg.data(=데이터 payload) / msg.sig(어떤 function인지)
- tx object : tx.gasprice(=gas 가격) /  tx.origin(=transaction을 만든 address)
- block object : block.coinbase(=miner address) / block.difficulty(=난이도) / block.gaslimit(=최대 허용치)
- address object : address.balance / address.transfer

 

 3-1) 사전에 선언된 함수명

- built-in function : addmod, mulmod, keccak256, sha256, sha3, ripemd160, ecrecover, this, selfdestruct

- contract

- interface

- library

 

 

4) 함수 

 4-1) 함수 키워드

- public : default, 다른 EOA나 외부에서도 누구나 쓸 수 있게 하겠어.
- external : 외부의 EOA는 이 funciont을 쓸 수 있지만, 내부에서는 X
- internal : 내부에서만 쓸 수 있고, 외부에서는 쓸 수 X / 파생된 contract들도 사용할 수 있음.
- private : 오직 자기 자신만 쓸 수 있음. "호출만 안 되는 것임. 코드를 볼 수는 있음"

- view : 보기만 가능
- pure : 고치는 것뿐만 아니라 상태 정보에 access 못함.
- payable : ether의 전송도 처리해줄 수 있음.

 

 4-2) 함수

- receive 함수 : 이 contract에게 receive를 받아 처리함. (원형. receive () external payable{ .. } )

- fallback 함수 : 매칭이 되는 데이터나 함수가 없을 때 fallback 함수를 사용함. (원형. fallback () external [payable] )

- contract 함수 : contract을 만들었을 때 처음 실행되는 함수. 초기 state를 설정함. 필수는 아니고 옵션임.

// 아래와 같이 명시적으로 작성함.

contract MEContract{
   constructor(){ 
     // constructor
   }
}

- selfdestruct 함수 : 이더를 받을 대상의 address를 적어주고 지워줌. (원형. selfdestruct(address recipient); )

- require 함수 : if문 같은 역할을 함. (원형. require(); )

- modifier 함수 : 함수에 여러 상태를 적용시킬 수 있음.

 

 

** modifier 함수 사용 예시

function destroy() public {
   require(msg.sender == owner);
   selfdestruct(owner);
}

// 하지만 위의 require코드가 따로 modifer 함수로 만들어져 사용될 수 있음.

modifier onlyOwner{
   require(msg.sender == owner);
   _;                                         // 해당 코드를 modified function으로 변경시킨다는 의미
}

function destroy() public onlyOnwer{
   selfdestruct(owner);
}

 

 

** 에러를 핸들링할 때 주로 사용하는 함수

- assert()

- require()

- revert

댓글