solidity 저장 방법

Storage

:Smart Contract에서 영구적으로 저장되는 데이터를 의미.
이 데이터는 블록체인에 저장되며, 계약이 실행 될 때마다 변경 될 수 있다.
:Storage는 계약의 상태를 유지하고 계약의 실행 결과를 저장하는데 사용된다.

Memory

:Smart Contract에서 일시적으로 사용되는 데이터를 의미.
계약이 실행 될 때마다 생성되며, 계약 완료 후 소멸
Memory는 계약의 실행 중에만 사용되며, 계약의 상태를 변경하지 않는다.

Calldata

:Smart Contract에 전달되는 데이터를 의미.
계약이 실행 될 때마다 생성, 계약 완료 후 소멸
계약의 실행 중에만 사용되며, 계약의 상태를 변경하지 않는다.
Calldata는 계약의 함수 호출 시 인자로 전달되는 데이터를 의미한다.

데이터 저장 방식은 Solidity에서 메모리 관리를 효율적으로 처리할 수 있도록 도와준다. 또한 Smart Contract의 실행 속도와 안정성을 향상시키는 데에 도움을 준다.

solidity

// // SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.18;

contract Square {
    
    //제곱
    function square(uint _a) public pure returns(uint){
        return _a**2;
    }

    //세제곱
     function cubic(uint _a) public pure returns(uint){
        return _a**3;
    }

    /// a의 b승
    function power(uint _a, uint _b) public pure returns(uint){
        return _a**_b;
    }
}
// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.18;

contract BYTES {
    bytes a;

    function setA(bytes memory _a) public {
        a = _a;
    }

    function setA2() public {
        a = "16";
    }

    function setA3(string memory _a) public {
        a = bytes(_a);
    }

    function getA() public view returns(bytes memory) {
        return a;
    }
}
  • setA함수
    :bytes 타입의 인자를 받아서 변수 a흘 설정하는 함수, 함수 인자인 _a는 memory로 선언, 함수가 실행 되는 동안에만 메모리에 저장, 변수 a에 _a를 할당하여 a를 업데이트
  • setA2함수
    :변수 a를 "16"설정하여 bytes타입으로 바로 할당, solidity compiler가 자동으로 메모리에 저장된다. -> memory 사용x
  • setA3함수
    :string 타입의 인자를 받아서 bytes 타입으로 변환 후 a를 설정하는 함수, 인자인 _a는 memory로 선언되어 실행되는 동안에만 메모리에 저장된다. 함수 내부에서는 _a를 bytes타입으로 변환 후, 변수 a에 할당한다.
  • getA함수
    :변수 a를 조회하여 반환, 반환값인 bytes타입은 memory로 선언되어 함수가 실행되는 동안에만 메모리에 저장

0개의 댓글