본문 바로가기
블록체인교육/솔리디티

[솔리디티] 2. 변수, 상수, 불변, 상태변수 읽고 쓰기

by Danny_Kim 2022. 6. 6.

 

[NEW] 누구나 쉽게 따라하는 솔리디티 강의(솔리디티 버전 0.8.13)

1. Helloworld, 카운터컨트랙트, 데이터타입

2. 변수, 상수, 불변, 상태변수 읽고 쓰기

3. 이더 단위, 가스와 가스가격

4. 조건문, 반복문, 맵핑(mapping)

5. 배열, 열거형(enum), 구조체(calldata,memory) 

6. 데이터 저장공간, 함수(view,pure 속성)

7. 에러(error), 함수수정자(modifier)

8. 이벤트(events), 생성자(constructor), 상속

9. 상속, 섀도잉,super키워드 함수 속성들

10. 인터페이스(interface), payable, 이더전송,받기 관련

11. Fallback, Call, Delegate(솔리디티 업그레이드 기법)

12. 함수 선택자(function selector), 다른 컨트랙트 사용 및 생성기법

13. Try Catch, Import(임포트), Library(라이브러리)

14. ABI 디코드, hash 함수, 서명검증, 가스최적화

 

 

1. Variable (변수)

- 솔리디티에서는 3가지 변수 타입이 존재한다.

 1) local (지역변수)

    - 함수 안에 선언됨

    - 블록체인에 기록되지 않음

 2) state (상태변수)

    - 함수 밖에 선언됨

    - 블록체인에 기록됨(저장됨)

 3) global (전역변수)

    - 블록체인에 관한 정보를 제공함

 

소스파일

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

contract Variables {
    // State variables are stored on the blockchain.
    string public text = "Hello";
    uint public num = 123;

    function doSomething() public {
        // Local variables are not saved to the blockchain.
        uint i = 456;

        // Here are some global variables
        uint timestamp = block.timestamp; // Current block timestamp
        address sender = msg.sender; // address of the caller
    }
}

 

2. Constants(상수)

- constants(상수)는 수정될 수 없는 변수.

- constants로 하드 코딩된 값(value)은 가스 비용을 절약해 줌.

- 대문자로 코딩하는걸 추천.

 

소스파일

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

contract Constants {
    // coding convention to uppercase constant variables
    address public constant MY_ADDRESS = 0x777788889999AaAAbBbbCcccddDdeeeEfFFfCcCc;
    uint public constant MY_UINT = 123;
}

 

3. Immutable (불변)

 - constants와 유사함.

 - immutable 변수는 생성자(constructor) 안에 선언될 수 있으나 값이 수정될 순 없음.

 

4. 상태변수를 읽고 쓰기

 - 상태변수(state variable)을 write(쓰거나) update(업데이트) 하기 위해서는 트랜잭션(transaction)을 보내야 함. (가스비 발생)

 - 트랜잭션(transaction) 비용 (가스비) 없이 상태변수를 읽을 수 있음.

 - 아래 예제의 마지막 함수 get()에서 view 속성을 부여하여(트랜잭션요청없이) num의 상태변수를 가스비 없이 읽을 수 있음.

소스파일

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

contract SimpleStorage {
    // State variable to store a number
    uint public num;

    // You need to send a transaction to write to a state variable.
    function set(uint _num) public {
        num = _num;
    }

    // You can read from a state variable without sending a transaction.
    function get() public view returns (uint) {
        return num;
    }
}

 

예제파일 소스 : https://solidity-by-example.org/

반응형

댓글0