KoreanFoodie's Study
Solidity 튜토리얼 #1 : 기본 문법 본문
먼저, Solidity 는 코드가 contract 단 아래에서 작성되어야 한다. 이게 가장 기초적인 항목으로, 아래 예제 코드에서는 ZombieFactory 라는 contract 내부에서 코드를 작성했다.
// 어떤 버전을 쓸 것인지 명시. 0.5.0 이상, 0.6.0 미만
pragma solidity >=0.5.0 <0.6.0;
contract ZombieFactory {
// Javascript 에서의 이벤트와 거의 동일한 문법이다
event NewZombie(uint zombieId, string name, uint dna);
uint dnaDigits = 16;
// 제곱을 ** 로 표현
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
string name;
uint dna;
}
// 접근 지정자를 지정할 수 있다
// 아래는 dynamic array 이고, [2] 같은 식으로 쓰면 fixed array 이다
Zombie[] public zombies;
// private function 앞에는 '_' 를 붙이는 것이 관례이다
// 매개변수 전달 시 string, arrays, structs, mappings 에는 memory 가 붙는다
function _createZombie(string memory _name, uint _dna) private {
uint id = zombies.push(Zombie(_name, _dna)) - 1;
emit NewZombie(id, _name, _dna);
}
// 함수는 view 또는 pure 로 설정할 수 있다
// view 는 app 내의 변수를 읽되, 변경하지 않는다는 뜻이고,
// pure 는 app 내의 변수를 사용조차 안한다는 뜻이다
function _generateRandomDna(string memory _str) private view returns (uint) {
uint rand = uint(keccak256(abi.encodePacked(_str)));
return rand % dnaModulus;
}
// 반환 값이 없으면 returns 를 안 써도 된다
function createRandomZombie(string memory _name) public {
uint randDna = _generateRandomDna(_name);
_createZombie(_name, randDna);
}
}
위의 코드는 주어진 이름으로 난수를 생성하고, 좀비 객체를 만드는 기능을 수행한다.
추가적으로 배운 점 / 느낀 점을 적어보자면 다음과 같다.
- function 밖에 선언된 변수는 State Variable 이라고 하며, 블록체인에 영구히 저장된다(진짜?)
- 다음과 같이 쓰면 자동으로 getter 가 만들어 진다 : Zombie[] public zombies;
- uint8, uint16, uint... 사이의 암시적 변환이 이루어지지 않아 명시적 캐스팅을 잘 해줘야 하는 것 같다(이건 추측임)
'Tutorials > Solidity' 카테고리의 다른 글
Solidity 튜토리얼 #6 : Web3.js 와 이더리움 연동하기 (5) | 2022.09.23 |
---|---|
Solidity 튜토리얼 #5 : ERC721 과 SafeMath (0) | 2022.09.22 |
Solidity 튜토리얼 #4 : 이더리움 전송 및 payable 함수 (0) | 2022.09.22 |
Solidity 튜토리얼 #3 : 심화 문법 (0) | 2022.09.21 |
Solidity 튜토리얼 #2 : 기본 문법 추가 (0) | 2022.09.21 |
Comments