솔리디티(Solidity)란?
이더리움 계열의 블록체인의 스마트 컨트랙트 대부분은 솔리디티로 작성되어 있으며, 계약 지향 프로그래밍 언어임.
자바의 클래스와 매우 유사한 문법을 가지고 있음.
- 정적 타입의 언어
- Ethereum Virtual Machine (EVM) 위에서 실행
- 문장의 끝은 세미콜론(;)
우리의 인코그니토 프로젝트의 목표는 스마트 컨트랙트 작성 시 취약점 발생에 유의하며 시큐어 코딩 가이드 라인을 제시하는 것임.
따라서, 스마트 컨트랙트의 작성 및 배포를 테스트 네트워크(Ropsten - 실제 이더리움 메인넷과 유사한 구조)에서 진행 할 것이고 이는 Remix 에서 손쉽게 할 수 있음.
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 속성과 함께 배열을 선언한다면,
다른 컨트랙트에서도 배열을 읽을 수 있으나 쓸 수 없음.
'Incognito Project' 카테고리의 다른 글
[Incognito Project] 개발 환경 셋팅 (0) | 2022.09.24 |
---|---|
[Incognito Project] 이더리움 2.0 전환 (0) | 2022.09.24 |
[Incognito Project] 솔리디티 문법 03 - mapping 과 msg.sender (0) | 2022.09.24 |
[Incognito Project] 솔리디티 보안 - Keccak256 함수로 난수 생성 (1) | 2022.09.24 |
[Incognito Project] 솔리디티 문법 02 - 함수 (0) | 2022.09.24 |