Prototype Ghost
귀신일지
Prototype Ghost
전체 방문자
오늘
어제
  • 분류 전체보기 (29)
    • Hacking (1)
      • CTF (0)
      • Wargame (0)
      • Review (1)
    • C (12)
      • Crypto (12)
    • C++ (4)
    • Python (1)
    • Swift (1)
    • Blockchain (9)
      • Solidity (9)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 보안
  • C
  • openssl
  • c언어
  • 리눅스
  • 암호화폐
  • 접근제어
  • solidity
  • 프로그래밍
  • 비트코인
  • 암호화
  • 블록체인
  • Blockchain
  • 솔리디티
  • 정보보안
  • Bitcoin
  • C++
  • ethereum
  • 복호화
  • 이더리움

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Prototype Ghost

귀신일지

Solidity : memory와 storage, 그리고 문자열 비교하기
Blockchain/Solidity

Solidity : memory와 storage, 그리고 문자열 비교하기

2023. 6. 1. 00:48

1. Memory와 Storage


  이번 글은 약간 아 그렇구나 하고 넘어가는 정도의 글이다. 솔리디티에서 데이터 저장공간은 memory와 storage로 나뉜다.

Storage는 블록체인에 영구적으로 저장되고 memory는 일시적으로, 외부에서 함수 호출이 일어날때마다 초기화된다.

아래 글에 알기 쉽게 잘 설명되어있어 링크를 가져왔다.

https://merrily-code.tistory.com/102

 

솔리디티 - 05. Storage와 Memory

솔리디티에는 변수를 저장할 수 있는 Storage와 Memory 라는 공간이 존재합니다. Storage는 블록체인 상에 영구적으로 저장되며, Memory는 임시적으로 저장되는 변수로 함수의 외부 호출이 일어날 때마

merrily-code.tistory.com

 

여기서 각 저장공간에 대해 변수를 저장할 때 어떤 차이가 있는지 알아보자.

 

관계 저장 방식 해설
memory와 memory 주소 복사 memory끼리 대입 시키면 값을 가리키는 주소를 공유해 서로 영향을 끼칠 수 있음
storage와 local storage 주소 복사 stroage에서 local storage 변수에 값을 넣으면 값을 가리키는 주소를 공유해 서로 영향을 끼칠 수 있음
storage와 memory 값 복사 storage->memory로 대입은 값을 복사해 서로 영향 주지 않음
그 외 storage가 포함된 관계 값 복사 이 외 나머지 storage에 대한 관게(ex)storage 와 storage)는 값 복사

 

2. 문자열 비교


솔리디티는 문자열을 비교하는 함수가 기본적으로 제공되지 않나보다...

그래서 문자열에 대한 해시끼리 비교하여 문자열이 같은지를 확인한다.

이때 솔리디티에서 사용하는 해시 함수는 keccak256이다.

문자열 비교 예시에 대해 살펴보자.

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

contract strcmpEx{
    function strcmp(string memory a, string memory b) public pure returns(bool){
        bool ret = keccak256(bytes(a)) == keccak256(bytes(b));
        return ret;
    }
}

위에 strcmp함수는 string 매개변수 a,b 를 keccak256으로 비교해 같으면 true, 다르면 false를 리턴한다.

참고로 위에 매개변수에 string 옆에 memory라고 써있는데, 참조타입의 경우, 함수의 매개변수, 반환값 또는 함수 내부의 변수로 정의될 때, 해당 데이터의 저장 공간을 명시해야 한다. 즉 매개변수이기 때문에 저장공간 memory를 생략하면 에러가 발생한다. 이제 위 함수가 어떻게 동작하는지 remix에서 확인해보자.

 

왼쪽 하단을 보면 hello와 hi를 비교했을 때, false가 반환되는 것을 알 수 있다.

이번엔 hello와 hello를 비교해서 true가 반환되는 것을 볼 수 있다.

 

마치며


  오늘은 저장공간에 대한 개념과 문자열을 비교하는 법, 또 참조형 데이터를 사용할 경우 저장공간을 명시해야 하는 것에 대해 알아보았다.

저장공간 명시는 안해주면 알아서 오류를 발생시켜 주기 때문에 확인하기 쉽고, 간단하게 storage와 memory에 대한 차이와 값이 복사되는지 주소가 복사되는지 알아보면 도움이 될 것 같다.

 

참고자료

https://www.yes24.com/Product/Goods/111099912

 

솔리디티 프로그래밍 완벽 가이드 - YES24

개발 경험이 없어도 쉽게 블록체인과 솔리디티를 이해할 수 있습니다!솔리디티는 스마트 컨트랙트를 구현하는 언어이며, 스마트 컨트랙트는 블록체인에서 작동하는 프로그램이다. 『솔리디티

www.yes24.com

 

728x90
반응형

'Blockchain > Solidity' 카테고리의 다른 글

Solidity : Event  (0) 2023.06.05
Solidity : 배열 다루기  (0) 2023.06.04
Solidity : 함수 및 Modifier  (0) 2023.06.01
Solidity : 가시성 지정자  (0) 2023.05.31
Solidity 자료형에 대해서 알아보자  (0) 2023.05.31
    'Blockchain/Solidity' 카테고리의 다른 글
    • Solidity : Event
    • Solidity : 배열 다루기
    • Solidity : 함수 및 Modifier
    • Solidity : 가시성 지정자
    Prototype Ghost
    Prototype Ghost

    티스토리툴바