솔리디티 소스 파일
솔리디티 소스 파일의 확장자는 .sol
이다. 파일 내에서 pragma solidity
를 사용, 컴파일러 버전을 지정할 수 있다.
1 | pragma solidity ^0.4.21 |
스마트 컨트랙트 구조
컨트랙트는 클래스와 비슷하여 상태 변수, 함수, 함수 변경자, 이벤트, 구조체, 열거형을 포함한다. 상속과 다형성 또한 지원한다.
1 | // 1. 컨트랙트 선언 |
데이터 위치
솔리디티의 변수는 컨텍스트에 따라 메모리 또는 파일시스템에 저장된다. 그러나 문자열, 배열, 구조체와 같은 복합 유형의 경우 이더 스토리지 또는 메모리를 유형에 추가해 재정의할 수 있다. 함수 매개 변수(리턴 매개 변수 포함)의 기본 위치는 메모리이고, 로컬 변수의 기본 위치는 스토리지이며 상태 변수의 경우 강제로 스토리지에 저장된다.
-
- 상태 변수
- contract 최상위단에 선언된 변수(스토리지에 저장)
-
- 로컬 변수
- 함수 아래에 선언된 변수(스토리지에 저장 / memory 키워드로 메모리 저장 가능)
다른 데이터 유형은 무엇인가?
솔리디티는 정적(static) 유형의 언어이다. 변수의 데이터 유형은 미리 정의되어 있어야 한다. 솔리디티에서 변수의 범위는 함수이다. 즉, 변수 선언 위치와 상관없이 함수 안 어디에서든 사용할 수 있다. 데이터 유형은 다음과 같다.
- bool(true or false)
- uint8, uint16, uint24, …, uint256(부호 없는 8, 16, 24, … 비트의 정수)
- ufixed0x8, ufixed0x16, …, ufixed0x256(부호 없는 실수)
- fixed0x8, fixed0x16, …, fixed0x256(부호 있는 실수)
- address(16진수 할당, 최대 20바이트 저장. 이더리움의 주소 제공.)
- balance와 send 속성 제공. balance는 계정의 잔액을 확인하고, send는 주소로 이더를 송금하는 데에 사용한다.
배열
솔리디티는 일반 및 바이트 배열을 모두 지원하며, 정적 배열 및 동적 배열, 다차원 배열을 지원한다. 일반 배열은 다음과 같이 사용할 수 있다.
1 | contract sample { |
책에 오류와 이해되지 않는 부분이 많아 이 블로그를 참고했다.
문자열
문자열의 길이는 언제나 동적으로 할당된다.
- bytes
원시 문자열(raw string)을 만드는 데 사용된다. - string
UTF-8 문자열을 만드는 데 사용된다.
1 | contract sample { |
✯ 이 포스트의 모든 내용은 이더리움을 활용한 블록체인 프로젝트 구축(에이콘) 책을 참고하여 작성되었습니다.