Incognito Project

[Incognito Project] 솔리디티 문법 01 - 자료형과 연산

이유갬 2022. 9. 24. 17:18
솔리디티(Solidity)란?

이더리움 계열의 블록체인의 스마트 컨트랙트 대부분은 솔리디티로 작성되어 있으며, 계약 지향 프로그래밍 언어임.

자바의 클래스와 매우 유사한 문법을 가지고 있음.

 

- 정적 타입의 언어

- Ethereum Virtual Machine (EVM) 위에서 실행

- 문장의 끝은 세미콜론(;)

 

우리의 인코그니토 프로젝트의 목표는 스마트 컨트랙트 작성 시 취약점 발생에 유의하며 시큐어 코딩 가이드 라인을 제시하는 것임.
따라서, 스마트 컨트랙트의 작성 및 배포를 테스트 네트워크(Ropsten - 실제 이더리움 메인넷과 유사한 구조)에서 진행 할 것이고 이는 Remix 에서 손쉽게 할 수 있음.

https://remix.ethereum.org/

 

Remix - Ethereum IDE

 

remix.ethereum.org

 

1. 스마트 컨트랙트 작성 시 첫 도입부

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.6;
pragma solidity >=0.6.6 < 0.9.9; //범위로도 설정가능함.

- 이는 컴파일 버전을 명시하는 것, 솔리디티 언어 버전에 맞게 컴파일해야 솔리디티 언어가 깨지지 않음.

- 참고로 // SPDX-License-Identifier: MIT 와 같은 라이센스 명시를 맨 윗줄에 할 수 있음.

- 솔리디티 문서에 의하면, 라이센스를 명시해줌으로써 스마트 컨트랙트에 대한 신뢰감을 높일 수 있고, 저작권과 관련된 문제를 해소하기 위해 명시한다고 설명함.

 

2. 컨트랙트

contract SimpleStorage {

    }

- contract 키워드를 이용하여 컨트랙트를 정의함.

- 모든 코드의 실행은 컨트랙트 블록 안에서 실행되어야 함.

 

3. 자료형

 

주요 자료형

uint256 favoriteNumber;
string name;

- uint (부호 없는 정수형) : uint 는 기본적으로 256비트 자료형, 더 작은 자료형을 원할 때는 uint32, uint64 를 선언함.

- int (정수형)

- bool (논리 자료형)

- string (UTF-8 인코딩 문자열)

- bytes (바이트)

- address (이더리움 계좌 주소)

 

연산

uint256 minimumUSD = 50 * 10**18; //**는 지수연산

- 사칙연산, 나눗셈(모듈로) 연산, 지수 연산을 지원함.

 

구조체

struct People {
        uint256 favoriteNumber;
        string name;
    }

 

- struct 키워드를 사용하여 구조체 정의가 가능하며, 컨트랙트 내부에서 정의되어야 함.

 

배열

People[] public people;

솔리디티에는 정적 배열과 동적 배열이 존재함.

- 정적 배열 : uint[4] FixedArray; : 미리 사용할 배열의 크기를 지정함.

- 동적 배열 : uint[] DynamicArray; : 배열의 크기를 지정하지 않아 계속 커질 수 있음.

- new 키워드 활용한 배열 : new uint[](5); : 길이 인자를 반드시 명시해주어야 함.

- public 속성 배열 :

배열에는 public 속성을 부여할 수 있는데 public 속성과 함께 배열을 선언한다면,

다른 컨트랙트에서도 배열을 읽을 수 있으나 쓸 수 없음.