5일차
아아 슬슬 어려워진다 그래 그래도 이정돈 되야제
아래의 맛있어 보이는 희생물들..
솔리디티에서 구조화된 데이터를 저장하는 또다른 방법. (다른 방법은 .push인듯)
솔리디티에서 함수의 실행은 항상 외부호출자가 시작한다. 컨트랙트의 함수를 호출하기 위해선 msg.sender가 꼭 있어야 한다. 만일
mapping (uint => address) public zombieToOwner;
mapping (address => uint) ownerZombieCount; //이렇게 선언했다면
zombieToOwner[id] = msg.sender;
//id(uint)를 통해 msg.sender(address)를 저장하겠다는 뜻이며
**ownerZombieCount[msg.sender]++;**
//저장된 주소(msg.sender)를 통해 ownerZombieCount값을 증가시키겠다는 의미이다.
require은 c언어에서의 if문이라고 생각하면 편하다. 괄호 안의 조건이 참이면 함수가 계속되고 참이 아니면 함수를 벗어난다
우리가 c언어에서 함수를 나누듯 컨트랙션도 코드로직을 나눌수 있는데 이를 상속이라고 한다.
예를 들어 A라는 컨트렉트가 코드가 길어져 나누고 싶은 경우 contract B is A{}
로 쓰면 된다.
다수의 파일이 있고 어떤 파일을 다른 파일로 불러오고 싶을 때 사용한다.
이 컨트랙트와 동일한 폴더(./)에 a.sol이라는 파일이 있을 때, 이 파일을 불러온다.
솔리디티에는 변수를 저장할 수 있는 공간으로 storage와 memory 두 가지가 있다.
Storage는 블록체인 상에 영구적으로 저장되는 변수를 의미하고 Memory는 임시적으로 저장되는 변수로, 컨트랙트 함수에 대한 외부 호출들이 일어나는 사이에 지워진다.
쉽게, Storage는 하드디스크, Memory는 RAM이라고 생각하면 된다.
..아직 이에 대한 이해가 잘 되지는 않는다. 언제 스토리지를 언제 메모리를 쓸지 말이다. 앞으로의 공부에서 이를 숙지할 것이다.
Zombie storage myZombie = zombies[_zombieId];
뭐 대충 이렇게 쓰인단댜.