1. Tokens on Ethereum

  • token: a smart contract that follows some common rules
    • transferFrom, balanceOf와 같은 함수를 share하는 contracts
    • 주로 balances라는 형태의 mapping을 지니기 때문에, 소유권을 추적할 수 있다

2. ERC721 Standards, Multiple Inheritance

  • ERC721 event: event Transfer, event Approval
  • ERC721 function: balanceOf, ownerOf, transferFrom, approve

  • multiple inheritance
    • contract는 2개 이상의 contract를 inherit 할 수 있다!

3. balanceOf & ownerOf

  • balanceOf: owner address 주고, owner가 가진 token의 잔고를 return
  • ownerOf: tokenId 주고, 해당 token의 주인을 return

4. Refactoring

  • modifier name change

5. ERC721: Transfer Logic

  • Transfer에는 2가지 방법이 있다
    1. transferFrom에 _from, _to, tokenId를 넣어 바로 transfer 하는 방법
    2. owner가 approve에 _to에 해당하는 address와 tokenId를 넣어서 _to address가 transferFrom을 실행할 권한을 줘서 transfer 하는 방법
  • 우리가 만든 함수에서도 `emit Transfer(_from, _to, _tokenId)를 넣어서 ERC721을 확인해야 한다

6. ERC721: Transfer Cont’d

  • mapping은 다음과 같은 순서로 선언한다
    • mapping (data_type => data_type) mapping_name
    • mapping_name이 뒤에 온다는 것을 명심하자!

7. ERC721: Approve

8. ERC721: Approve

9. Preventing Overflows

  • contract를 쓸 때도 overflow, underflow를 조심해야 한다.
  • OpenZepplin의 SafeMath를 사용해도 기본적인 overflow, underflow는 막을 수 있다.

10. SafeMath Part 2

11. SafeMath Part 3

12. SafeMath Part 4

  • ++ 연산자를 .add(1)로 바꾸는 것을 무한반복 했다
  • using SafeMath for uint256, using SafeMath32 for uint32등을 선언하고 add, sub, mul, div을 활용하는 습관을 들이자!

13. Comments

  • @title: 함수, 변수에 대한 직관적인 설명
  • @author: 작성자에 대한 최대한 간단하게 설명
  • @notice: user를 위해 function, contract에 대해 설명
  • @dev: 개발자를 위한 extra deatil
  • @param: 매개변수에 대한 설명
  • @returns: return 값에 대한 설명

14. Wrappint It Up

15. Lesson 5 Complete!