본문 바로가기

IT/블록체인

이더리움 - 솔리디티란?

공부를 위해 정리해놓은 글입니다. 오류가 있을 수 있으며 지적은 언제나 감사히 받겠습니다.

 

솔리디티는 이더리움에서 스마트 컨트랙트를 구현하기 위한 high-level 언어이다. 솔리디티로 작성한 스마트 컨트랙트는 EVM(Ethereum Virtual Machine) 상에서 작동한다.

이더리움에 스마트 컨트랙트(혹은 코드)를 배포하는 과정은 다음과 같다.

1. 솔리디티로 메소드 작성

2. 코드를 솔리디티 컴파일러를 통해 이더리움 바이트 코드로 변환한다.

3. 변환된 바이트 코드를 블록체인에 배포한다. 이때 내가 코딩한 스마트 컨트랙트에 접근할 수 있는 주소값이 배정된다.

 

솔리디티에서 storage란 블록체인 상에 영구적으로 저장되는 변수이고 memory는 임시로 저장되는 변수로서 컨트렉트가 종료될 시에 사라진다. c로 비유해서 생각해봤을 때 memory변수는 heap같은 느낌이고 storage는 스택에 저장되는 변수로 이해했다. 솔리디티는 블록체인에서 동작하므로 c의 스택은 솔리디티의 블록체인이라고 비유적으로 이해해봤다.

storage 배열의 경우에는 계속 push가 가능한 가변적 길이의 배열이지만 memory 배열은 가변적이지 않다. memory변수 사용시의 장점은 storage 공간을 사용하지 않으므로 가스의 소모가 훨씬 절약된다는 점이다. 함수 내부에서만 사용되는 변수의 경우 memory 변수로 선언하여 사용할 수 있도록 해야겠다.

 

솔리디티 상태 제어자 view와 pure

함수 선언에 pure가 붙으면 함수 내의 코드는 함수 호출시 전달받은 인자로만 지지고볶는다는 뜻이고, view가 붙으면 인자 외에도 함수 외부의 다른 변수를 사용하는데 값을 변경하지는 않고 그저 참조만 한다는 뜻이다. 함수 선언에 view를 붙이면 다음과 같다. "이 함수는 실행할 때 너의 로컬 이더리움 노드에 query만 날리면 되므로 어떠한 트랜젝션도 만들지 않는다." 트랜젝션은 모든 개별 노드에서 실행되며 이때 가스가 소모된다.

이 두 상태 제어자의 특징은 컨트랙트 외부에서 호출될 때 가스를 소모하지 않는다는 것이다. 하지만 다른 함수에 의해 내부적으로 호출될 때에는 가스를 소모한다.

'IT > 블록체인' 카테고리의 다른 글

이더리움 dids 구현 - nodejs  (0) 2020.12.29
이더리움 - 채굴? 채굴자?  (0) 2020.09.08
블록체인 이더리움이란?  (0) 2020.09.07