klaytn ide 사용
스마트컨트랙트 발행
NFT의 조건
1. 발행
- 일련번호, 글자, 소유자
mint
- tokenId, uri, owner
2. 전송
-누가, 누구에게, 무엇을
transferFrom
- from, to, tokenId
발행 전송 구현해보기
name - 토큰 이름
symbol - 단위
tokenOwner - 소유주
tokenURIs - 고유한 식별자 > 글자
누구에게, 토큰 아이디, 글자
컴파일 해보면
이렇게 발행할 수 있음
0번 토큰 내용
0번 토큰 소유주
전송은 owner가 바뀌는 것
from > to
보낸 사람이 from이랑 똑같을 때 (아무나 내걸 함부로 전송하면 안되니까)
보낸 사람이 토큰의 소유주 일 때
토큰 전송 > 소유주 바꾸기 > tokenId
오너 확인해보면 잘 바뀌어있음!
전송하는 사람이 from 이 아니면 에러남!!!
소유한 토큰 리스트
오너가 만든 토큰들은 다 볼 수 있음
새로 발행하는 토큰들을 소유한 토크배열(_ownerTokens)에 추가해줌
전송할 때도 소유한 배열에 변화가 있어야 됨
전송하면 소유한 배열 목록에서 하나가 빠져야됨!
해당하는 토큰을 맨 뒤로 빼고 배열의 마지막 요소를 하나 삭제...
근데 이렇게 돌면 스왑이 안되지 않나.................???????
내가 바보인걸까..... 스왑이 아니라 그 값 그대로 나오게 돼있는데 뭐징
그리고 어차피 for문 도는거
그냥 _ownerdTokens[from][i] == tokenId 면,,,
음 뭐 .filter를 한다던가 ''이렇게 해서 없애거나,, undefined로 바꾼다던가 그런건 안되는건가
휴 이건 솔리디티를 공부해야겠당....
해봐야지..
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
하 강의가 이렇게 되어있다니
스왑이 잘못된게 맞았다...ㅎ....
보면서 에... 이게 아무리봐도 아닌데 뭐징.. 이러고 한참 있었는데ㅠㅠㅠㅠ하 농락당한 기분
바뀐 제대로된 스왑 코드!!!
저기 [10, 15, 19, 20] 을 예로 들어보자면
맨 마지막 20을 lastTokenIndex에 넣어줌
tokenId(19)가 지금 _ownedTokens[from][i] 와 같다면, 포문 돌아서 내 배열에서 없어져야될 토큰이 나오면
지금 _ownedTokens[from][i]에 19대신 20으로 바꿔줌!
그리고 맨 끝자리, lastTokenIndex에 20대신 19를 넣어줌(tokenId)
그렇게 하고 length--를 하면 지워진다
어쨌든 이렇게 만든 토큰 지우기 함수를
safeTransferFrom (전송하는 함수) 안에 넣어줌
from과 tokenId를 넘겨주고!
전송자의 소유 리스트에선 지우고 받는 사람의 소유 리스트에 추가!
ownedTokens에 tokenId 추가 > 토큰을 받은 애한테 추가!
이제...자야지...
나머지는.....다음에..........