본문 바로가기
개발 학습/블록체인

S4: Solidity 기본 문법

by StelthPark 2021. 11. 25.

값 형 데이터 타입

 

bool로 선언된 변수는 true/false를 갖는다.

bool 변수명 = true; 

 

부호가 붙는 정수는 int로 0이상의 값에는 uint가 쓰이며 뒤에 8은 8의배수를 붙여 변수의 크기를 비트단위로 지정한다.

int8 변수명 = -20

uint16 변수명 = 10

 

고정바이트는 bytes1~bytes32까지 선언한다

bytes3 변수명 = 'abc'

변수명[0] = 'a'

변수명[1] = 'b'

 

주소

address yourAddress = 0x10abb5efEcdc01234f7b2384912398798E089Ab2;

address 주소명 = 0x주소값

0.8버전 부터는 address형식은 송금 불가능한 주소값이 됐다. 특정 주소로 송금가능한 것은 address payable형식을 사용해야하며 기존 address를 payable( ) 의 인자로 넣어 address payable형식으로 바꿀수있다.

만약 int나 byte형태의 데이터를 바꾸기전에 address( ) 의 인자로 넣어 address형식으로 바꾼뒤 다시 address payable 인자에 넣어 변환한다.

 

배열

정적배열 : uint[4] {배열이름} 

동적배열 : uint[ ] {배열이름}

 

문자열

string 변수명 = 'abcd'

 

매핑

매핑이란 비휘발성인 스토리지 데이터영여에 키-값구조로 데이터를 저장할때 사용하며

mapping(키형식 => 값형식) {변수명} 으로 사용한다.

mapping(address => int) public userAddress;

 

view와 pure

 

상태변수 접근 수준

생성자 함수

함수변경자

함수선언에 modifier를 추가하여 함수에 변경자를 적용할수 있다.

_; 를 기점으로 이 코드 전에는 함수기 실행되기전에 실행되고 이코드 이후는 함수가 종료되고 실행된다.

 

에러핸들링

  • revert : 해당 함수를 종료하고 에러를 리턴합니다.
  • require, assert: 설정한 조건이 참인지 확인하고, 조건이 거짓이면 에러를 리턴합니다.
pragma solidity ^0.8.7;

contract VendingMachine {
    address owner;

    function buy(uint amount) public payable {
        if (amount > msg.value / 2 ether)
            revert("Not enough Ether provided."); //에러를 리턴하면서 에러메시지를 지정할 수 있습니다

        // 송금 진행
    }
}

 

require는 그자체로 if...revert 처럼 사용되는 게이터 키퍼 역할을한다.

게이트 키퍼란 특정 동작을 조건이 만족하면 실행하고 아니면 실행못하도록 하는 역할이다.

pragma solidity ^0.8.4;

contract VendingMachine {
    address owner;

    function buy(uint amount) public payable {
        require(
            amount <= msg.value / 2 ether,  // 주어진 조건이 참이면 넘어가고, 거짓이면 에러 리턴
            "Not enough Ether provided."  // 에러 메시지를 지정할 수 있습니다
        );

        // 송금 진행
    }
}

assertrequire 와 사용법이 동일하나, 사용하지 않은 가스를 호출자에게 반환하지 않고, 공급된 가스를 모두 소모하며 상태를 원래대로 되돌립니다. require은 조건불만족시 실행안함.

 

열거형

열거형은 특정값들의 집합으로 지정하고 집합안에 있는 데이터만 값으로 가지게된다. 그렇지 않으면 예외처리한다.

enum EvalLevel { Bad, Soso, Great }

 

이벤트

컨트랙트는 event 키워드를 사용해 이벤트를 설정하고, 경우에 따라 emit 키워드를 사용해 이벤트를 실행합니다. 이벤트가 실행된 경우, 트랜잭션에 기록됩니다.

'개발 학습 > 블록체인' 카테고리의 다른 글

S4: Over/Under flow를 막아주는 SafeMath  (0) 2021.11.26
S4: ERC-20  (0) 2021.11.26
S4: EVM과 Geth로 스마트컨트랙트 배포  (0) 2021.11.24
S3: dApp  (0) 2021.11.18
S3: 암호화 기술과 보안  (0) 2021.11.17

댓글