ERC-5114 소울바운드 배지 (Soulbound Badge)

Last Call · NFT·멀티토큰 · 2022-05-30 작성

발행하는 순간 특정 NFT에 묶여서 그 뒤로는 절대 옮길 수 없는 배지 토큰을 만듭니다. 한 NFT가 쌓아 온 이력이나 자격을 영구 기록으로 남길 수 있습니다.

왜 필요한가

온체인에서 자격이나 이력을 나타내는 토큰은 대부분 다른 주소로 전송할 수 있습니다. 전송이 가능하면 수료 증표나 참여 기록 같은 배지를 다른 사람에게 팔거나 넘길 수 있어서 그 기록이 정말 그 주체가 쌓은 것인지 믿기 어려워집니다. 또 배지에 딸린 설명 데이터가 보통의 웹 주소에 있으면 발행자가 나중에 내용을 바꾸거나 지울 수 있고 이것이 특정 사용자를 검열하거나 조작하는 수단이 될 수도 있습니다. 이 표준은 배지를 발행하는 순간 특정 NFT에 묶고 이후에는 옮길 수 없게 해서 한 NFT에 모인 배지들이 쪼개지거나 다른 컬렉션과 합쳐질 수 없게 보장합니다. 배지 정보도 내용이 바뀌면 주소가 달라지는 콘텐츠 주소 지정 방식으로만 제공하게 해서 발행자조차 사후에 내용을 바꾸지 못하게 합니다.

구현해야 하는 것

심층 설명

배지는 주소가 아니라 NFT에 바인딩됩니다

배지의 소유자는 지갑 주소가 아니라 NFT입니다. ownerOf(badgeId)는 바인딩된 NFT의 nftAddress와 nftTokenId를 돌려주며 아직 발행되지 않은 배지에 대해서는 반드시 throw해야 합니다. 발행 후에는 호출할 때마다 항상 같은 값을 돌려줘야 하고 그 값은 원래 Mint 이벤트에 기록된 값과 같아야 합니다. Mint 이벤트는 같은 badgeId에 대해 두 번 발생해서는 안 됩니다. 호환 대상이 되는 소울은 [address,id]로 식별할 수 있는 모든 자산입니다.

전송 금지가 보장하는 것

배지가 절대 이동할 수 없다는 요구는 두 가지를 동시에 보장합니다. 하나의 NFT에 묶인 소울바운드 배지 컬렉션이 분리될 수 없고(non-separability) 다른 컬렉션과 합쳐질 수도 없다는(non-mergeability) 점, 그리고 바인딩 조회 결과를 사용자가 적극적으로 캐시할 수 있다는 점입니다.

메타데이터는 불변의 콘텐츠 주소 지정 URI여야 합니다

collectionUri()와 badgeUri(badgeId)가 돌려주는 URI는 모두 불변이어야 하고 콘텐츠 주소 지정이 가능해야 합니다. 원문은 ipfs://는 되고 http://는 안 된다는 예를 듭니다. 그 콘텐츠가 참조하는 외부 링크도 같은 규칙을 따라야 합니다. 두 URI의 데이터는 병합되며 badgeUri의 데이터가 collectionUri의 데이터보다 우선합니다. 이 요구는 발행자가 원격 콘텐츠를 바꾸거나 지우는 방식으로 특정 사용자를 검열하거나 조작하는 것을 막기 위한 것입니다. 배지는 소유자가 전송할 수 없을 뿐 아니라 발행자도 소유권을 회수하거나 변경할 수 없습니다.

데이터 포맷은 의도적으로 정하지 않습니다

URI가 가리키는 데이터의 형식과 두 데이터를 병합하는 방법은 이 표준에서 의도적으로 뺐습니다. 앞으로 별도 표준으로 발전시킬 수 있게 하기 위해서입니다. 이 표준이 정하는 것은 불변성 제약뿐이며 이것으로 데이터 형식과 무관하게 소울바운드 배지의 취지를 지킵니다. 대신 metadataFormat()이 'EIP-ABCD'나 'soulbound-schema-version-4' 같은 문자열로 형식과 버전을 알려 주므로, 호출자는 데이터를 들여다보며 형식을 추측할 필요 없이 바로 파싱할 수 있습니다.

인터페이스 감지 표준 사용 권고

이 표준의 구현자는 호출자가 해당 컨트랙트의 인터페이스 구현 여부를 쉽게 확인할 수 있도록 인터페이스 감지 표준에도 의존해야 합니다(SHOULD). 이 표준은 새로운 토큰 유형이며 [address,id]로 식별 가능한 기존 소울 자산 외의 기존 토큰과는 하위 호환을 의도하지 않습니다.

쓸 때 주의할 점

ERC 원문 · ← ERCs