[Solidity] 스마트 컨트랙트 배포 / 솔리디티 변수, 상수

9_miin·2023년 4월 20일
0
post-thumbnail

컨트랙트 배포의 흐름

  • 새 컨트랙트 배포 -> 컨트랙트의 인스턴스가 생성되어 블록체인에 배포된다.
  • 컨트랙트가 배포될 때 생성자 함수의 인수를 넣어 초기화 한 후 배포할 수 있다.
  • 배포가 된 이후 컨트랙트에 있는 기능들을 호출해서 상태변수를 업데이트하여 블록체인에 저장한다.

컨트랙트 인스턴스

배포한 인스턴스는 해당 컨트랙트 파일 import 만으로는 가져올 수 없다.

해당 계약 파일을 import하면 계약의 형식을 가져온 것이고 계약을 배포했을 때 생성된 계약의 주소가 필요하다. 이 두 가지가 있어야지 내가 배포한 컨트랙트의 인스턴스를 엑세스할 수 있다.

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0 <0.9.0;

import "./Mint.sol";

contract SaleToken {
    Mint public mintTokenAddress;

    constructor(address _mintTokenAddress) {
        mintTokenAddress = Mint(_mintTokenAddress);
    }
}

솔리디티 변수, 상수 (불변)

변수(Variable)

3가지 종류의 변수 존재

  1. local(지역변수) - 함수 안에 선언 / 블록체인에 기록되지 않는다
  2. state(상태변수) - 함수 밖, 계약 안에 선언 / 블록체인에 기록됨
  3. global(전역변수) - 블록체인에 관한 정보를 제공

Dapp에서 컨트랙트에 함수를 호출 했을때 함수 안에서 지정했던 지역 변수를 return하면 실제로 return값이 출력되지 않는다. ThirdWeb/sdk를 사용해보니 트랜잭션 정보만 return됐다.
결과값을 return하고 싶다면 상태 변수를 사용하거나 이벤트를 발생시켜 블록체인에 저장해야 한다.

상수(Constants)

  • 수정될 수 없는 값
  • constants로 하드 코딩된 값(value)은 가스 비용을 절약해 줌.
  • 변수명 앞에 constant 키워드 사용
  • 생성자 함수로 인해 초기화 가능
// 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;
}

불변(Immutable)

  • 상수와 유사함
  • 변수명 앞에 immutable 키워드 사용
  • 생성자 함수로 선언은 가능하나 값 수정 불가능

0개의 댓글