스마트 컨트랙트 공부
지난 Lesson 2에 이어서 Lessson 3 바로 시작하겠습니다.
레슨 3에서는 고급 솔리디티 개념에 대해서 배운다고 하네요
챕터 1은 컨트랙트의 불변성에 대해서 이야기 하고 있습니다. 스마트 컨트랙트가 한번 배포하게 되면 고칠 수 있는 방법이 없다고 하네요. 또한 외부 의존성으로 저번 레슨 2에서 크립토 키티 컨트랙트 주소를 고정으로 좀비 컨트랙트에 넣었는데 이 크립토 키티 컨트랙트가 문제가 생길 시 주소를 바꿀 수 있도록 다른 함수를 만들어 본다고 합니다.
그래서 다음과 같이 키티 인터페이스의 주소를 바꿀 수 있게 외부에서 어드레스를 받아 올 수 있는 함수를 추가하였습니다.
여기선 방금 전에 만든 코드의 취약점을 설명하면서 누구든 키티 컨트랙트 주소를 바꿀 수 있으므로 컨트랙트 소유자만이 바꿀 수 있게 하는 방법을 알려줍니다. 바로 Ownable 컨트랙트를 통해서 말이죠.
다음과 같이 코드를 바꾸어 줍시다.
챕터 3에서는 함수 제어자에 대해서 설명하고 있습니다. 함수 제어자가 어떤 flow로 실행되는지 설명하고 있네요. 설명들을 한번 읽은 후 코드에다가 제어자를 추가해 줍니다.
챕터4 에서는 가스에 대해서 소개하면서 가스가 무엇이고 왜 필요한지, 가스를 아끼기 위한 방법이 무엇인지에 대해서 알려줍니다. uint 같은 경우 struct의 안을 빼고는 uint8, uint16 등등 아무거나 써도 상관없다고 합니다!
구조체에다가 직접 해보기 코드를 작성해 줍니다.
챕터 5에서는 시간단위에 대해서 설명하면서 솔리디티에서 기본적으로 제공하는 now에 대한 설명과, 직접 해보기에서 좀비들이 공격하거나 먹이를 먹은 후에 1일이 지나야만 다시 공격할 수 있는 쿨타임 같은 것들을 만드는 것을 해봅니다.
쿨다운타임이라는 변수를 만들고 전 챕터에서 만든 레벨과 레디타임을 새로운 좀비를 만들때 인수로 전달해 주기 위해 넣어줍시다.
챕터 6에서는 좀비 재사용 대기시간을 구현하는 것과 구조체를 인수로 전달하는 방법에 대해서 소개합니다.
좀비 구조체를 인수로 전달하여서 그 구조체 안에 존재하는 좀비의 readytime을 설정해주고 밑의 isReady함수에서는 bool 형식을 반환하여서 좀비 레디타임이 충분한 시간이 지나 다시 먹거나 공격할 수 있느 시간이 되면 true를 반환하고 그렇지 않으면 false를 반환합니다.
챕터 7에서는 기존 feedAndMultiply 함수가 public으로 되어 있어서 아무나 사용 할 수 있기 때문에 internal로 만들어 다른 함수에 의해서만 만드는 방법을 소개하여 직접 해보기에서 만드는 과정을 볼 수 있습니다.
다음과 같이 코드를 짜 줍시다.
챕터 8에서는 인수를 가지는 함수 제어자에 대해서 소개하고 있네요. 인수를 받아서 제어자가 어떤 조건을 만족시킬때 실행되게 할수 도 있습니다.
챕터 9에서는 전에 만든 제어자를 통해서 좀비 제어자를 만듭니다.
좀 전에 만든 aboveLevel을 통해 레벨이 2 이상인 경우에만 이름을 바꾸고 레벨이 20 이상인 경우에만 좀비 Dna를 바꿀 수 있게 합니다.
챕터 10에서는 가스를 소모하지않고 좀비 군대를 볼 수 있는 view 함수에 대해서 소개합니다.
함수를 만들어 줍시다.
챕터 11에서는 storage와 memory의 차이에 대해서 설명하고 있습니다. storage의 경우 블록체인에 영구적으로 기록되는 것이고 memory의 경우 함수가 끝날 때 까지만 존재하므로 가스 소모 측면에서 우세합니다.
external view 를 통해 가스비를 쓰지 않고 특정 사용자가 소유한 모든 좀비를 uint[] 배열 형식으로 볼 수 있게 다음과 같이 코드를 적어줍니다.
챕터 12에서는 함수 내에서 배열을 다룰 때 storage가 아닌 for문을 써야 하는 이유에 대해서 좀비의 주인이 바뀌었을 때 특정 사용자의 좀비 요소에만 접근해서 볼 수 있게 하여 가스비를 for문을 통해 줄이는 방법에 대해서 이야기합니다.
따라서 다음과 같이 for 문을 작성하여 좀비중에 _owner의 좀비가 맞는지 확인하여 맞으면 그 좀비의 ID를 result배열에 추가해줍니다.
챕터 13에서는 지금까지 한 실습 내용의 요약과 좀비의 이름을 바꿀 수 있게 해주는 창이뜹니다. 한번 씩 해보시면 오른쪽 좀비의 이름이 바뀌시는 것을 볼 수 있을 것입니다.
이것으로 Lesson3 를 마치고 Lesson4로 찾아오겠습니다. 감사합니다.
이정민(dlwoabsdk@gmail.com)