챕터 10: View
데자뷰인가.. 다루었던것 같은데. 가스는 중요하다. 그걸 줄이기 위해서 view를 사용한다. View는 함수가 블록체인에 있는 데이터를 보기만 할께요! 하는 거라 가스비 소모가 없다. 바로 요구사항 대로 코드를 짜보자.
function getZombiesByOwner(address _owner) external view returns(uint[]){
}
returns라고 써도 이젠 신기하지 않다.
챕터 11: storage
이번에도 복습이다. 저장장소는 storage와 memory가 있다고 했고, storage는 블록체인 상에 데이터를 세기는 것이라 가스비 소모가 크다고 했다. 그걸 줄여주기 위해 memory에 써도 되는 변수는 memory를 선언해서 가스비 소모를 줄이자.
function getZombiesByOwner(address _owner) external view returns(uint[]) {
uint[] memory result = new uint[](ownerZombieCount[_owner]);
return result;
}
차근차근 요구사항대로 코딩을 하기만 하면 되는 부분이라 설명할 내용이 딱히 없다.
챕터 12: For 반복문
For를 왜 조심해야 하는가. 이 역시 가스 때문이다. 가스가 코딩 스타일을 강요한다. 효율적으로 코드를 짜는 것은 항상 중요하지만 블록체인 상에서는 그 중요성이 더 커진다.
만약 storage를 써야하는 데이터를 for문을 만들어야한다면? 한바퀴 돌때마다 가스가 지출되니까 자칫 무한 루프를 만들어버리면 컨트렉트를 배포하다가 내 계좌를 비워버릴수도 있다.
여기서는 그냥 for문에 대한 설명이다. 일반 프로그래밍 문법과 같다. 특히 자바스크립트랑!
function getZombiesByOwner(address _owner) external view returns(uint[]) {
uint[] memory result = new uint[](ownerZombieCount[_owner]);
uint counter = 0;
for (uint i = 0; i < zombies.length; i++){
if (zombieToOwner[i] == _owner) {
result[counter] = i;
counter++;
}
}
return result;
}
복습복습. 이런 함수를 써보면서 앞서 배운 내용을 복습하자.
챕터 13: 마무리
얼라리요? 끝났다. 배운걸 복습해보자.
• CryptoKitties 컨트랙트를 변경하는 한 가지 방법을 배웠네
• onlyOwner를 이용해 핵심적인 함수를 보호하는 방법을 배웠네
• 가스와 가스 사용 최적화에 대해 배웠네
• 우리 좀비들에게 레벨과 대기시간 개념을 적용했네
• 좀비가 특정 레벨이 되면 좀비의 이름과 DNA를 재설정할 수 있는 함수를 만들었네
• 마지막으로, 사용자의 좀비 군대를 반환하는 함수를 만들었네.
이런걸 했다! 와웅.. 써놓고 보니 좀 한 것 같은데 막상 복습만 했을 뿐 ㅎ
챕터 14: 챕터3 끗
https://share.cryptozombies.io/ko/lesson/3/share/뭐라도먹어야힘을쓰지?id=Z2l0aHVifDI1MzExNjMz
참고문헌
https://d2fault.github.io/2018/03/19/20180319-about-solidity-1/
코어 이더리움 프로그래밍 – 박재현, 오재훈, 박혜영