ERC-721, NFT 스마트 컨트랙트 이해하기(1) [TIL / Solidity]

알락·2022년 12월 6일
0

이더리움

목록 보기
11/16
post-thumbnail

드디어 스마트 컨트랙트의 꽃, NFT를 구현해본다. 다음의 글과 이어지는 관련 글들은 스마트 컨트랙트의 기술적인 부분을 정리하고 있기 때문에 참고하기 바란다.


NFT

[NFT 대표주자 크립토펑크 프로젝트]

NFT는 Non-Fungible Token의 약어로, 대체불가능한 토큰 이라는 뜻을 가지고 있다. 이로인해 ERC-20을 따르는 기존 Token이 Fungible(대체가능한)하다는 것과 반대되는 특징을 가지게 된다.

NFT가 있기 전까지는 디지털 자산의 소유권을 주장하기란 많이 어려웠다. 왜냐하면 디지털 상으로 창작물이 외부에 공개되면 쉽게 복사되어 사용 가능하기 때문이다.

NFT의 특징 때문에, 많은 사람들은 NFT를 통해서 디지털 자산의 소유가 가능해졌다고 얘기한다. 스마트 컨트랙트를 이용하여 디지털 자산들이 고유식별번호가 매겨지고, 어떤 계정에 소유되어 있는지 기록할 수 있게 되었기 때문이다. 기존의 창작물을 업로드하는 것에 지나서, 직접 창작물의 소유권을 얻어 다른 사람들과 거래를 할 수 있게 된다. 블록체인에 의한 소유권의 가치를 믿는 사람들에게는 이제 디지털 자산이 누군가에게 소유되었다는 것도 약속이나 규칙처럼 받아들이게 되었다.


NFT 개념 이해하기

⌞ 이해당사자들

ERC-721은 해당 스마트 컨트랙트가 디지털 자산이 현재 누구에게 있는지에 대해서 기록을 한다. 그래서 기본적으로 "누가 소유자(owner)냐" 라는 데이터를 저장하게 된다. 그리고 자산에 대한 소유권 대리를 맡는 사람을 지정할 수도 있다. 이를 "operator" 라고 지칭하는데, 소유자와 동일한 권한을 갖는 제3자라고 생각해도 무방하다. 여기서는 중개자라고 칭하려고 한다. 그리고 한 토큰에 대해서만 소유자에게 권한을 받은 인원이 있는데 이를 Approver(승인자), 혹은 Approved Person이라고 이해하면 되겠다.

최종적으로 누군가에게 소유된 토큰 하나의 소유권은 다음과 같이 정리될 수 있다. NFT 하나의 시점이다.
1. 소유자(Owner) 본인
2. 소유자의 모든 권한을 이양받은 operator 다수
3. 소유자에게 해당 토큰의 소유권 권한을 받은 승인자(Approver) 1 명

⌞ ERC721 스마트 컨트랙트 관리 데이터들

[상태변수]

string private _name; // NFT 이름
string private _symbol; // NFT 심볼(단위 느낌)

mapping(uint256=>address) private _owner; 	// NFT owner 데이터
mapping(address=>uint256) private _balances;	// 계정이 보유한 NFT 개수 데이터
mapping(uint256=>address) private _tokenApprovals;	// 특정 NFT에 대한 승인자 데이터
mapping(address=>(mapping(address=>bool)) private _operatorApprovals;	// owner와 동등한 권한을 갖는 operators 데이터

_name 변수와 _symbol 변수는 역할이 분명하다.

위에서 설명했던 NFT에 대한 소유권은 _owner 변수에 기록되고 있다. 그리고 이 스마트 컨트랙트에서 발행된 NFT 소유 개수 또한 계정에 맵핑되어 _balances 변수에 기록된다.

특정 1 개 NFT의 소유권한을 이양받은 Approver(승인자)를 저장하는 변수가 _tokenApprovals 이다. _owner와 비슷한 형태다.

owner의 모든 NFT 소유권에 대한 동등한 권한을 갖는 operator 데이터는 _operatorsApprovals 변수에서 관리한다. 예를 들자면 0x1234라는 owner 가 0x5678 계정을 operator로 지정하게되면 _operatorsApprovals[0x1234][0x5678]true 값을 갖는다.


정리

결국 NFT 관련 스마트 컨트랙트는 위 변수들을 어떤 조건에 어떻게 값을 설정해주냐로 결정된다. 사실상 위의 변수들만으로도 NFT를 구현할 수 있다.

profile
블록체인 개발 공부 중입니다, 프로그래밍 공부합시다!

0개의 댓글