- 지역변수 : 지역(function)안에서만 작동 및 참조할 수 있는 변수
- 상태변수
: 코드 전체에서 참조 활용이 가능함 (흔히 다른 언어에서 전역변수라고 불림)
: 체인에 같이 들어가는 요소 중 하나
: 변경하려면 가스비가 필요함- 전역변수
- public : write ; 상태변수 변경가능 ; 가스비 발생 O
- view : read ; 상태변수 읽을 수만 있음; 지역변수는 변경 가능 ; 가스비 X
- pure : only 지역변수, 상태변수는 읽지도 못함 ; 가스비 X
( ※ pure 쓰는 경우 : 상태변수 수정이 없고, 상태변수 읽을 일도 없을 때 사용 )
- 함수 하나 하나를 사용할 때도 가스비가 발생함
(코드를 잘못 짜면 가스비가 많이 드는 서비스가 될 수 있음)- remix UX/UI에서 가스비 사용 유무를 나타내줌
: view와 pure 함수는 state variable(상태변수)의 값을 변화시키지는 않음 → gas비 안씀
- Compiler
: 컴파일러의 버전을 정할 수 있음
: 선택한 컴파일러가 코딩에서 선언한 버전보다 더 구식이면 오류 발생
(선언한 버전보다 낮은 버전에선 작동 안 함 (높은 버전에선 작동))
- 컨트랙트 배포하기
순서 : 코드작성 → compile 완료 → 배포(deploy)
// 주석으로 License선언 (없으면 컴파일 오류발생) // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.8.2 <0.9.0; //compiler선언 //StoreandReturn이라는 contract작성 contract StoreandReturn { uint a; // 숫자형 변수 a ; 상태변수 uint b; // 숫자형 변수 b uint c=2; //숫자형 변수c, 값은 2 // 함수이고, 이름은 getA, input값은 없음, public 하고 view 함, output 값은 1개 있음, uint 형 function getA() public view returns(uint){ return a; } //input 값으로 uint 형인 _a를 받아옴; a의 값을 변경하기 때문에 view사용 못 함(gas비 발생) function setA(uint _a) public { a= _a; //_a ; 지역변수 } function setAasFive() public { a=5; } //output값 2개, 둘다 uint형 function getAB() public view returns(uint,uint){ return(a,b); } // Q. 숫자 _aa와 _bb를 받아서 2개의 숫자를 더한 결과값을 반환하는 함수 Add를 구현하세요 function Add(uint _aa, uint _bb) public pure/*상태변수는 하나도 필요없을 때 pure*/ returns(uint) { return _aa+_bb; } // Q. 숫자 a와 b를 갖고와서 이 2개의 숫자를 더한 결과값을 반환하는 함수 Add2를 구현하세요 function Add2() public view/*상태변수를 갖고오기 때문에 view로*/ returns(uint) { return a+b; } }