솔리디티 ( Solidity )
https://docs.soliditylang.org/en/v0.8.17/contracts.html?highlight=constant#constant-and-immutable-state-variables
변수
보통의 프로그래밍 언어라면 변수는 스택 ( Stack ) 힙 ( Heap ) 등의 메모리에 저장된다.
하지만 솔리디티에서는 변수는 메모리뿐만아니라 하드디스크같은 스토리지나 callData라는 영역에도 저장한다
- 스토리지 ( Storage )
영속적으로 읽고 쓰기가 가능한 저장 공간이다
key - value 값 쌍으로 이루어진 mapping 구조를 갖고 있으며 각 키와 값은 32바이트의 크기를 가진다
스토리지는 함수 외부에 정의된 변수(상태변수), 함수와 같은 스마트 컨트랙트 주요 정보가 영속 저장된다
다른 저장 공간을 사용하는 것보다 가스 비용이 비싸다
- 메모리 ( Memory )
스토리지와 다르게 휘발적으로 읽고 쓰기가 가능한 저장 공간이다.
함수나 반복문 등이 실행될 때 매개변수나 반환값, 함수 내부의 변수와 같은 데이터가 잠시 저장되었다가 실행되면 지워진다.
- 콜데이터 ( callData )
콜데이터는 휘발적이지만 읽기만 가능한 공간이다.
메모리와 달리 데이터 저장은 불가능하다.
트랜잭션 또는 call 함수의 매개변수가 유지되는 읽기 전용 공간이다
주로 external 이 적용된 함수의 매개변수에 콜데이터 공간을 사용한다.
함수, 반복문의 매개변수 ( 반환값 포함 ) >> 메모리에 저장
모든 지역 변수 >> 스토리지
외부(external) 함수 매개변수 ( 반환값 미포함 ) >> callData
상태변수 >> 스토리지
상태변수
상태변수는 컨트랙트 저장소(이더리움 블록체인)에 영구적으로 저장되는 변수를 말한다
(즉 항상 스토리지에 저장된다 )
보통 컨트랙트 최상단에 선언하고 사용한다.
상태변수를 선언할 때 지정할 수 있는 접근 수준을 함께 표기한다
가시성 지정자 또는 visibility 라고 부른다
- internal ( default )
상태 변수에 따로 명시하지 않으면 internal 이 기본값으로 적용된다
해당 변수가 선언된 컨트랙트 내에서 액세스할 수 있다
해당 변수가 선언된 컨트랙트를 상속받은 컨트랙트에서 액세스할 수 있다
- pubilc
public 으로 지정된 상태 변수는 컴파일러가 자동으로 읽기 위해 getter 함수를 생성한다
해당 변수가 선언된 컨트랙트 내부에서는 직접 스토리지에서 해당 변수값을 가져온다
외부 컨트랙트나 클라이언트 코드에서도 getter 함수를 통해 모든 사람들이 해당 변수를 읽을 수 있음
getter 함수는 view 함수이므로 가스비용을 지불하지 않고 호출할 수 있다
- private
해당 변수가 선언된 컨트랙트 내에서만 액세스할 수 있다. ( 상속된 컨트랙트에서도 접근이 불가능 )
지역변수
지역변수는 함수가 실행될 때까지만 존재하는 변수를 말한다
보통 함수 안에 선언되는 변수를 말한다
- 동적크기를 갖는 참조형 변수가 아니라면 기본적으로 메모리에 저장된다
- 동적인 크기나 구조체나 배열 형식의 참조형 변수는 스토리지에 저장된다
전역변수
전역변수란 글로벌한 블록체인 안에 있는 특수 변수를 의미한다
블록체인 및 트랜잭션에 대한 속성을 갖고 올 수 있다.
'BlockChain > 스마트 컨트랙트' 카테고리의 다른 글
솔리디티란? ( Solidity ) (2) | 2023.03.28 |
---|---|
이더리움 스마트 컨트랙트 (0) | 2022.12.22 |
비트코인 스크립트 (2) | 2022.12.21 |
비트코인 스마트 컨트랙트 (1) | 2022.12.21 |
스마트 컨트랙트 (0) | 2022.12.21 |
댓글