새소식

Study/Block chain

TIL - klaytn ide로 nft 발행해보기, nft 전송, nft 삭제, nft 추가

  • -

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 추가 > 토큰을 받은 애한테 추가!

 

 

 

이제...자야지...

나머지는.....다음에..........

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다.

이 글이 도움이 되었다면 공감 부탁드립니다.