uint 256 : 용량, 표현할 수 있는 길이, 2의 256승
https://www.evm.codes/?fork=shanghai
전역변수 : 함수 외부(Whole Chain), 전체 접근 가능 => 자기 영향력의 활동 범위가 전체에 해당
상태변수 : contract 안에서 선언된 변수 => 어디서든 따올 수도, 접근할 수도 있음.
지역변수보다 더 무겁고 비싸다(모든 함수가 사용하니까).
읽어오는 건 돈이 안 드는데, 변경하면 돈이 듦.
지역변수 : 함수 내부(function), 외부에서 접근 불가 => 자기 영향력의 활동 범위가 함수 안에만 해당. 변경 시 가격이 쌈.
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.15;
contract Basic {
uint a; // 숫자형 변수 a
uint b; // 숫자형 변수 b
uint c = 2; // 숫자형 변수 c
function setA(uint _a) public {
a = _a;
}
function setB(uint _b) public {
b = _b;
}
function setC(uint _c) public {
c = _c;
}
function setAB(uint _a, uint _b) public {
a = _a;
b = _b;
}
function setAasFive() public {
a = 5;
}
function setAasSeven() public {
a = 7;
}
function setAasNine() public {
a = 9;
}
function getA() public view returns(uint) {
return a;
}
function getB() public view returns(uint) {
return b;
}
function getC() public view returns(uint) {
return c;
}
function getAB() public view returns(uint, uint) {
return (a, b);
}
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.2 <0.9.0;
contract Basic2 {
function add(uint _a, uint _b) public pure returns(uint) {
return _a + _b;
}
function mul(uint _a, uint _b) public pure returns(uint) {
return _a * _b;
}
function sub(uint _a, uint _b) public pure returns(uint) {
return _a - _b;
}
function sub2(int _a, int _b) public pure returns(int) {
return _a - _b;
}
}
function div(uint _a, uint _b) public pure returns(uint, uint) {
return (_a / _b, _a % _b);
}
EVM 수업 때 view, pure 설명 예정.
-> 소수를 쓸 수 없음 -> _a % _b를 통해 나머지도 표현 가능!
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.2 <0.9.0;
// view 와 pure / 지역변수와 상태변수
contract Basic3 {
uint a; // 상태변수
function setA(uint _a) public { //상태변수를 변화 시킴 -> view, pure (x)
a = _a;
}
function getA() public view returns(uint) { // 상태변수 참조 -> view
return a;
}
function getB(uint _a /*지역 변수*/) public pure returns(uint) { // 지역변수만을 사용 -> pure
uint _b = _a**3; //
return (_a+_b);
}
function getAplusB(uint _b) public view/*상태변수를 참조함*/ returns(uint) {
return a+_b;
}
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.2 <0.9.0;
contract Basic4 {
string a; // 문자형 변수 a, 상태변수
uint b;
function setA(string memory _a) public {
a = _a;
}
function setAasABC() public {
a = "abc";
}
function setAB() public {
a = _a;
b = _b;
}
function getA() public view returns(string memory) {
return a;
}
function getAB() public view returns(string memory, uint) {
return (a, b);
}
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.2 <0.9.0;
contract Basic5 {
bytes a;
function setA(bytes memory _a) public {
a = _a;
}
function setB() public {
a = "ab"; // 0x6162 -> ascii code 참고
}
function setC(string memory _a) public {
a = bytes(_a); // string 형의 _a가 bytes형의 a로 저장됨
}
function setD() public {
a = "12"; // 0x3132 -> ascii code 참고
}
function getA() public view returns(bytes memory) {
return a;
}
}
-> string이 bytes를 따라간다.
Extended-ASCII-Table-large
Standard-ASCII-Table-large
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.2 <0.9.0;
/*
1. 값 넣기
2. 값 빼기
3. 값 보기
4. 값 바꾸기
*/
contract ARRAY {
uint[] numbers; //자료형[] array_이름
// 1. 값 넣기
function push(uint _a) public {
numbers.push(_a); // array_이름.push(넣고 싶은 값)
}
// 2. 값 빼기
function pop() public {
numbers.pop();
}
// 3. 값 보기
function getNumber(uint _n) public view returns(uint) {
return numbers[_n-1];
}
// 4. 값 바꾸기
function setNumber(uint _n, uint _m) public {
numbers[_n-1] = _m;
}
function deleteNumber(uint _n) public {
delete numbers[_n-1];
}
function getLength() public view returns(uint) {
return numbers.length;
}
// 전체 반환
function returnArray() public view returns(uint[] memory) {
return numbers;
}
}
view
: function 밖 변수들 보기 가능 / 변경은 불가능
pure
: function 밖 변수들 보기, 변경 불가능할 때 사용
pure 사용 function은 순수하게 함수 내부에 선언된 변수들 만으로 구성
아무 것도 없을 때는 function 밖 변수들 보기, 변경 가능.
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.2 <0.9.0;
/*
1. 값 넣기
2. 값 빼기
3. 값 보기
4. 값 바꾸기
*/
contract ARRAY_S {
string[] letters;
// 1. 값 넣기
function push(string memory _a) public {
letters.push(_a); // array_이름.push(넣고 싶은 값)
}
// 2. 값 빼기
function pop() public {
letters.pop();
}
// 3. 값 보기
function getLetter(uint _n) public view returns(string memory) {
return letters[_n-1];
}
// 4. 값 바꾸기
function setLetter(uint _n, string memory _m) public {
letters[_n-1] = _m;
}
function deleteLetter(uint _n) public {
delete letters[_n-1];
}
function getLength() public view returns(uint) {
return letters.length;
}
// 전체 반환
function returnArray() public view returns(string[] memory) {
return letters;
}
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.2 <0.9.0;
/*
1. 값 넣기
2. 값 빼기
3. 값 보기
4. 값 바꾸기
*/
contract ARRAY_static {
uint[6] numbers;
function setNumber(uint _n, uint _m) public {
numbers[_n] = _m;
}
function deleteNumber(uint _n) public {
delete numbers[_n-1];
}
function getLength() public view returns(uint) {
return numbers.length;
}
// 전체 반환
function returnArray() public view returns(uint[6] memory) {
return numbers;
}
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.2 <0.9.0;
/*
1. 값 넣기
2. 값 빼기
3. 값 보기
4. 값 바꾸기
*/
contract ARRAY_static {
string[6] numbers;
function setNumber(uint _n, string memory _m) public {
numbers[_n] = _m;
}
function deleteNumber(uint _n) public {
delete numbers[_n-1];
}
function getLength() public view returns(uint) {
return numbers.length;
}
// 전체 반환
function returnArray() public view returns(string[6] memory) {
return numbers;
}
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.2 <0.9.0;
contract FUNCTION_NAME {
uint a;
uint b;
uint c;
function add(uint _a, uint _b) public pure returns(uint) {
return _a+_b;
}
function add(uint _a, uint _b, uint _c) public pure returns(uint) {
return _a+_b+_c;
}
function add(uint _a, string memory _b) public pure returns(string memory) {
return _b;
}
function add() public view returns(uint) {
return a+b;
}
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.2 <0.9.0;
contract BOOL {
bool isFun;
function Fun() public {
isFun = true;
}
function notFun() public {
isFun = false;
}
function reverse() public {
isFun = !isFun;
}
function setFun(bool _a) public { // true, false를 넣어도 되지만, 1과 0을 넣어도 작동함
isFun = _a;
}
function getFun() public view returns(bool) {
return isFun;
}
}