ERC-5615 ERC-1155 공급량 조회 확장 (ERC-1155 Supply Extension)

Final · NFT·멀티토큰 · 2023-05-25 작성

ERC-1155 토큰에서 특정 id의 총공급량을 조회하는 totalSupply 함수와 그 id의 존재 여부를 확인하는 exists 함수를 표준으로 정합니다.

왜 필요한가

ERC-1155는 하나의 컨트랙트에서 여러 종류의 토큰을 id로 구분해 다루는 멀티토큰 표준입니다. 그런데 기본 ERC-1155에는 특정 id의 토큰이 모두 몇 개 발행되어 있는지 알려 주는 함수가 없습니다. 그래서 지갑이나 앱이 어떤 토큰의 전체 수량을 알고 싶어도 표준으로 기댈 방법이 없었습니다. 실제로는 OpenZeppelin의 ERC1155Supply처럼 공급량을 알려 주는 구현이 이미 쓰이고 있었지만 함수의 이름과 동작이 표준으로 정해져 있지 않으면 읽는 쪽이 안심하고 공통 코드를 짤 수 없습니다. 또 공급량이 0이라는 답만으로는 아직 발행 전인 id인지, 앞으로도 발행되지 않을 id인지 구분할 수 없다는 문제도 있습니다. 이 ERC는 이미 존재하던 방식을 그대로 표준화해서 어떤 ERC-1155 토큰이든 같은 함수로 id별 총공급량(total supply)과 존재 여부를 확인할 수 있게 합니다.

구현해야 하는 것

심층 설명

exists는 존재 여부를 넓게 답합니다

exists(id)는 해당 토큰 id가 지금 존재하는지(exists), 과거에 존재했는지(previously existed), 앞으로 존재할 수 있는지(may exist)를 불리언 하나로 반드시(MUST) 돌려줘야 합니다. 즉 단순히 현재 발행량이 있는지가 아니라, 그 id가 이 컨트랙트에서 의미 있는 id인지를 알려 주는 함수입니다. 그래서 totalSupply가 0인 id라도 exists는 true일 수 있습니다.

totalSupply는 없는 id에 0을 돌려줍니다

totalSupply(id)는 주어진 id를 가진 토큰의 개수를 반드시(MUST) 돌려줘야 하고 그 id가 존재하지 않으면 반드시 0을 돌려줘야 합니다. 존재하지 않는 id라고 해서 호출을 되돌리지(revert) 않는데, id의 존재 여부가 중요한 컨트랙트는 totalSupply 대신 exists를 쓰라는 설계입니다.

공급량 0의 두 가지 의미를 구분합니다

totalSupply가 0이 되는 경우는 두 가지입니다. 그 id의 토큰이 아직 하나도 발행되지 않았거나, 앞으로도 영영 발행되지 않을 id인 경우입니다. exists는 이 둘을 구분하기 위해 포함되었습니다. 원문은 totalSupply가 0이어도 exists가 false를 돌려줄 수 있다고 명시합니다.

ERC-165 탐지는 요구하지 않습니다

구현은 ERC-165 인터페이스 탐지를 지원할 수 있지만(MAY), 이 인터페이스를 쓰는 쪽은 ERC-165에 의존해서는 안 됩니다(MUST NOT). 인터페이스가 충분히 단순해서 추가 복잡성이 불필요하고 ERC-165를 요구하면 이미 배포된 기존 구현들과 호환되지 않기 때문입니다.

기존 관행을 그대로 표준화했습니다

이 ERC는 새 기능을 발명한 것이 아니라 이미 쓰이던 방식을 표준화한 것입니다. totalSupply와 exists 함수는 ERC-721과 ERC-20을 본떠 만들었고 OpenZeppelin의 ERC1155Supply 구현과 역호환되도록 설계되었습니다. 상태가 Final이므로 확정된 표준입니다.

ERC 원문 · ← ERCs