How NFT smart contract really work
Ethereum NFT 기준
# OpenSea
예제 Doodle #1815
OpenSea 주소에서
chain
,contract address
,token
확인할 수 있다.https://opensea.io/assets/{chain}/{contract address}/{token id}
- Details 에서도 동일하게 NFT에 대해 알 수 있다.
- Contract Address 링크 : NFT Collection contract Etherscan 페이지로 연결
- Token ID 링크 : NFT Token의 metadata
# Etherscan
# “Contract” tab
Code
- Contract Source Code : solidity. contract code 내용
- Contract ABI
- Contract Creation Code
- ByteCode
- Opcodes
Read Contract : 해당 스마트 컨트렉트에 대해 READ 할수 있는 function들
- 예를 들어,
onwnerOf
function에tokenId
를 넣으면 해당tokenId
의 NFT를 가진 owner query 가능 tokenURI
: NFT metadata link- IPFS 주소
https://ipfs.io/ipfs/{뒤쪽 주소}
- 앞부분은 바뀌지 않고 맨 뒤 token ID만 변경된다.
- https://ipfs.io/ipfs/QmPMc4tcBsMqLRuCQtPmPe84bpSjrC3Ky7t3JWuHXYB4aS/13
- 이렇게 다른 곳에 저장되어있기 때문에 owner가 원하면 metada를 바꿀 수 있다.
- owner를 만약 resign(이 역시도 function) 한다면 owner가 없게 되고 해당 NFT는 영원히 바꿀 수 없게 된다.
balanceOf
: owner 주소가 해당 contract NFT 를 몇개 가졌는지totalSupply
: 이 contract의 최대 발행갯수
- 예를 들어,
Write code
- 지갑과 연결하여 code를 실행시킬 수 있다.
setBaseURI
: Metadata URL 세팅하기 (내가owner
가 아니기 때문에 denied 됨) (코드 보면onlyOwner
contract owner 만 가능하게 되어있음 ) 나중에 metadata가 호오오옥시나 바뀌게 되면 이setBaseURI
로 변경할 수 있음.withdraw
:onlyOwner
해당 contract의 balance를 해당 function call 한 사람에게 transfer 한다. (누구든 부를 수 있긴 하지만onlyOwner
에서 막히니 owner만이 balance를 가져갈 수 있다.)
# NFT Staking
- 예시 Wizards & Dragons Game (WnD)
- Contract Etherscan
Contract
tab >Read Contract
>tower
다른 contract 주소가 있음 staking contracttransferFrom
: ERC-20 standard function -tokenOwner
로 부터 이address
에게 NFT를 보내겠다.- unstaking “claim”, “unstaking” function을 보면 대부분 여기에 reward에 대한 코드가 있다.