Solidity

sookyoung.k·2023년 5월 25일
0
post-thumbnail

3일 동안 Solidity 찍먹을 해봤는데... 폭풍 진도를 따라가기 어려워서 수업 정리를 하진 못했당... 근데 또 자바랑 비슷해서 천천히 보니까 알 것 같기도 하고~~ 그래서 나중에 내가 보려고 따로 정리해두는 솔리디티


Solidity

계약 지향 프로그래밍 언어 → 이더리움 등의 블록체인 플랫폼의 스마트 계약 (Smart Contract) 작성 및 구현에 사용

➡️ EVM(이더리움 가상 머신)을 위한 코드를 컴파일 하도록 설계된 언어

EVM → Solidity로 작성된 스마트 컨트랙트를 컴파일 해서 얻은 Byte code를 실행한다.

* Byte code: EVM이 정의하는 명령어, OP코드들의 집합
OP코드: EVM명령어를 16진수로 표현한 것

EVM 저장 위치

EVM은 스택이라는 저장공간과 3개의 데이터 저장공간(스토리지, 메모리, 콜데이터)으로 이루어져 있다

stack (evm 작업 세트 메모리)

스토리지가 필요하지 않은 임시 데이터를 저장하는데 사용하는 영역

EVM → 명령어들을 순차적으로 실행하면서 파라미터와 연산의 결과값을 스택(메모리 공간)에 유지하면서 실행함
➡️ 스택은 EVM의 명령어들이 직접적으로 참조하는 영역(저장 공간)

  • 1024개의 데이터를 제한적으로 저장해서 사용할 수 있다
  • 스택 내의 모든 값은 함수 실행이 완료될 때 해제

✅ 일시적인 데이터를 저장하기 위해서 사용됨

storage (전역메모리)

각각의 계정에 존재하는 영역이며 영속적인 저장 공간이다

  • 대부분의 변수, 함수들이 저장된다
  • 데이터를 키 - 밸류 형태로 저장 (✔️ 매핑은 반드시 스토리지로 명시해야 함)
  • 주로 상태 변수를 저장하는데 사용된다
  • 계약 상태는 데이터의 메모리와 같이 처리된다
  • 블록체인에서 영구적으로 저장 → 매우 비싼 장치에 저장하기 때문에 비용이 비싸다

✅ 계약 상태(State)를 저장할 때 사용됨

memory (로컬메모리)

계약 내부에 함수를 실행할 때 일시적으로 할당되거나 해제되는 일시적인 데이터 저장 영역

  • 함수의 파라미터, 리턴값, 레퍼런스 타입이 주로 저장된다
  • 데이터를 바이트의 배열 형태로 저장하는 공간
  • 스토리지처럼 영속적이지 않고 함수 내에서만 유효하기 때문에 비교적 적은 비용이 든다
  • 그렇지만증설 시 가스비 부담이 크다

✅ 지역 변수와 함수 인자를 저장할 때 사용(생성 된 임시 값 사용할 때 사용)

calldata

함수를 호출할 때 입력 인수와 같은 실행 상태 데이터를 읽어오기 위한 영역

  • 함수의 인수는 기본적으로 콜데이터에 저장된다 (메모리와 비슷하지만 파라미터 값을 저장하는 용도로만 사용됨)
  • 비영속적인 읽기 전용 저장 공간

✅ 함수의 입력 값 등을 사용하는데 사용

참고링크
https://dayone.tistory.com/8?category=918008
https://dayone.tistory.com/8
https://velog.io/@thyoondev/%EC%86%94%EB%A6%AC%EB%94%94%ED%8B%B0-%EB%AC%B8%EB%B2%95-EVM%EA%B3%BC-%EC%A0%80%EC%9E%A5-%EC%9C%84%EC%B9%98
https://balmostory.tistory.com/364

profile
영차영차 😎

0개의 댓글