brunch
매거진 개발실습

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

스마트 컨트랙트 공부

by SKKRYPTO


1*2fu6l5fK-vz7vHWWnngeog.jpeg


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


1*xPWA45rvjC_HymtpyZNF0A.png


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


1*8HZGC9aIz7Y40ku9qxJ2qQ.png


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


1*Fv7FahjT1Rl4oBrhw5VBUg.png


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


1*JOtnIAnMXHpMpBiKTgs4ow.png


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


1*Tb9iEF--5RcXMwifvVZafQ.png


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


1*deyOiIAjK2sv_HiQOURZYQ.png


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


1*mb9eWmtYsCU28EMt4yg9Ng.png


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


1*ipphItsfYhdzQizr59_NVQ.png


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


1*7wkwh42TK0KoNrhLddTIsg.png


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


1*zmomPHw-at6Qbf5nRXWofQ.png


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


1*S8L_XnstB80_XCHWMNWNJw.png


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


1*GsVbtp1K8IjUHmgYszgDrA.png


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


1*84CwxXSfLe9OtuDjl4fnbQ.png


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


1*Uqi9Cl4rzyuatpYDXP9fgg.png


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


1*TlQTeri_OtelibM5aC9xOA.png


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


1*rKWoTntKz7JF9Fe812rDhg.png


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


1*8E_rMT6gBQE3ofkRTIqBHg.png


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


1*Txs_I4wbQXX9RQ6D56WTCQ.png


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


1*r-LAExuMhmc1Wj9rmK-wMw.png


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


1*amj2JnQVyDFGTxKq17IyBg.png


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


1*1YaAHywgPiFGX0uX9-NBxA.png


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


1*YDTWgKCCfIJmKW5IK8PpXg.png




1*EKZc6rcoUGXF4ysgtCYRrw.png


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


1*aO9seTA56Me8SrRhDHRV9Q.png


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


1*L3RC67k2dKLq4NBTRLvqEg.png


이렇게 수정합니다.


1*peRnu8hoIyDPcONa5YJLhA.png


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


1*7E-iSppqHgITov919BCifQ.png


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


1*6Hca8nGciOieDgKU9beV4w.png


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

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




이정민(dlwoabsdk@gmail.com)

keyword
매거진의 이전글[크립토 좀비 실습] - Lesson 4