brunch

매거진 개발실습

You can make anything
by writing

C.S.Lewis

by SKKRYPTO Mar 06. 2020

[크립토 좀비 실습] - Lesson 5

스마트 컨트랙트 공부



벌써 Lesson 5에 왔습니다! 앞으로 레슨 5와 6밖에 얼마 안남았으니 힘내서 가봅시다.            



챕터 1에서는 토큰에 대해서 설명하며 ERC20 과 ERC721에 관한 간략한 설명을 하고 있습니다. 또한 토큰을 구현할 때 토큰 컨트랙트가 사용하는 표준 함수 집합에 대해서 설명합니다.      



직접 해보기에서는 그동안 배워왔던 것을 새로운 sol파일을 만들기 위해 연습삼아 다시 해보라고 하네요. 그래서 위와 같이 코드를 작성해 줍니다.            



챕터 2에서는 ERC721에 관한 표준으로 메소드들에 대한 정보와 솔리디티에서컨트랙트에 다중 상속이 가능하다는 것을 설명하고 있습니다. 전에 파이썬이나 자바스크립트를 공부할 때에 상속을 배웠지만 다중상속이라는 개념을 보니신기하네요.. ㅇㅅㅇ      



컨트랙트에 좀비어택과 ERC721을 다중 상속한 모습입니다.            



챕터 3에서는 ERC721의 메소드였던 balanceof와 ownerOf의 메소드의 구현에 대해서 설명하고 있습니다. 직접 해보기도 관련 내용입니다.            



따라서 다음과 같이 작성해 줍니다.            



챕터 4에서는 ownerOf라는 같은 이름을 가진 제어자를 정의했었는데 컴파일을 하게되면 에러가 발생하여 리팩토링이라는 것을 해야한다고 설명합니다. 리팩토링이라는 개념은 프로그래밍에서 잘 쓰이는 단어인데요 '외부동작을 바꾸지 않은면서 내부 구조를 개선하는 방법'입니다!            



제어자의 이름을 바꾸어 줍시다.            



챕터 5에서는 ERC721을 전송할 때 2개의 다른 방식이 있음을 알려주네요 바로 코드를 작성해 봅시다.            



_transfer라는 함수를 정의하여서 바로 토큰을 전송할때 2개의 다른 방식인 transfer와 takeOwnership에서 쓰일 수 있는 private함수를 정의하였습니다!            



챕터 6는 챕터 5에 이어서 public transfer함수를 구현합니다. 바로 코드 작성을 하겠습니다.            



이렇게 함수를 작성해 주어서 transfer를 실행시키면 챕터 5에서 작성한 _transfer를 실행시킬 수 있게 해줍니다.            



이어서 챕터7도 토큰 전송 메소드인 approve와 takeOwnership에 대한 내용으로 코드 작성으로 넘어가겠습니다.            



위 쪽에서 매핑을 정의해 주신다음 approve함수를 작성해 줍시다. 전송하려는 사람이 토큰의 소유자여야만 다른 사람에게 토큰을 줄 수 있게 됩니다.            



챕터 8에서는 approve에 이어서 takeOwnership에 관한 내용입니다! 마찬가지로 코드로 넘어갑시다. 후다다닥      



여기서는 msg.sender 가 토큰/좀비를 가질 수 있는지 확인하기위해 require를 통해 확인하고 승인이 되면 _transfer를 호출하여 토큰 전송 로직을 실행하게 되어 토큰을 받게되는 구조입니다! 저는 처음에 이것을 볼 때 owner, msg.sender 개념 때문에 헷갈렸는데 앞서 말했듯이 takeOwnership은 토큰을 받는 사람이 호출하는 것이기 때문에 msg.sender는 토큰을 받는 사람이 됩니다.            



챕터 9에서는 SafeMath를 이용해 오버플로우를 막는 것을 설명하고 있습니다. SafeMath는 기본적으로 솔리디티에서 제공하는 라이브러리 인데 일종의 계산을 할 때에 있어서 보호장치라고 생각을 하시면 되고 컨트랙트를 작성하실 때 쓰는게 좋다고 합니다.      



다음과 같이 작성해 줍시다.            



챕터 10은 실제로 SafeMath를 import 해와서 지금까지 만들어 놓은 코드를 바꾸어 보는 과정입니다.            



코드를 이렇게 작성해 줍시다.            



챕터 11도 마찬가지로 지금까지 써온 코드를 SafeMath 형식으로 바꾸어주는 작업을 하게 됩니다.      






따라서 다음과 같이 코드를 바꾸어 줍시다. 저기서 꼬인다는 말은 readyTime변수가 now+coolTime으로 함수에서 설정하는데 그 값이 uint256 즉 2의 256승 값을 넘어가서 그런것 같네요..? 혹시 정확한이유를 아신다면 댓글로 알려주시면 감사하겠습니다.            



챕터 12에서도 기존의 코드를 SafeMath 메소드로 구성하라고 하네요 똑같이 해줍시다.            



이렇게 수정합니다.            



챕터 13에서는 솔리디티에서 주석을 어떻게 다는 지 설명을 하고 있습니다.      



영어로 작성해 보았습니다. ㅎㅎ            



챕터 14에서는 그동안 한 내용 요약과 새로운 좀비를 받은 것을 확인 할 수 있습니다. 좀비를 클릭하면 이름을 바꿀 수 있는 창이 뜹니다.

이렇게 크립토 좀비 Lesson5를 마쳤습니다. 다음은 마지막 Lesson6로 찾아오겠습니다. 감사합니다.




이정민(dlwoabsdk@gmail.com)

매거진의 이전글 [크립토 좀비 실습] - Lesson 4
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari