ERC-5570 디지털 영수증 NFT (Digital Receipt Non-Fungible Tokens)

Final · NFT·멀티토큰 · 2022-09-01 작성

상점에서 물건을 살 때 판매자가 발행하는 디지털 영수증을 NFT로 만들고 그 메타데이터에 JSON 형식의 영수증 내용을 담는 표준입니다.

왜 필요한가

온라인 쇼핑 영수증은 지금도 이메일이나 종이로 제공됩니다. 판매 시점의 시스템은 이미 디지털인데, 영수증은 사람이 읽는 형태로 바뀌었다가 가계부나 회계 프로그램에 넣으려면 다시 디지털로 옮겨야 합니다. 이 디지털에서 아날로그로, 다시 디지털로 돌아가는 과정 때문에 불필요한 수작업 입력이나 불편한 영수증 스캔 앱이 필요합니다. 또 체인 위에서 결제한 거래라도 영수증을 체인 밖이나 별도 컨트랙트로 나눠 보관하면, 나중에 사용자가 어떤 거래의 영수증인지 직접 찾아 맞춰야 합니다. 이 표준은 구매 거래 자체에 영수증 NFT를 연결해, 지갑에서 거래를 누르면 바로 영수증이 나오는 구조를 제안합니다. 판매자가 개인키로 서명해 영수증이 진짜임을 증명할 수도 있습니다.

심층 설명

ERC-721 확장과 거래 흐름

이 표준은 고유 토큰의 소유와 관리를 다루는 ERC-721을 확장합니다. 흐름은 세 단계입니다. 고객이 온라인 상점에서 구매하면 결제 과정에서 NFT를 민팅할 수 있는 선택지가 주어지고 스마트 컨트랙트가 고객에게 디지털 영수증 NFT를 지급합니다. 이후 판매자가 주문을 처리할 때 표준이 정한 JSON 스키마에 맞는 디지털 영수증을 그 NFT의 메타데이터로 업로드합니다. 즉 토큰 발행이 먼저 이뤄지고 영수증 데이터는 주문 처리 시점에 채워지는 구조입니다.

루트 스키마의 필수 필드

영수증 JSON은 루트 스키마와 품목 스키마 두 부분으로 구성됩니다. 루트 스키마(receipt.json#)의 필수 필드는 name, description, image, receipt 네 가지입니다. name은 토큰이 디지털 영수증임을 나타내는 이름, description은 짧은 설명, image는 보거나 인쇄할 수 있는 영수증 이미지입니다. 핵심인 receipt 객체는 id(판매자가 생성한 고유 ID), date(발행일, date 형식), vendor(발행 주체 정보), items(품목 배열, 최소 1개, 중복 불가)를 필수로 요구하고 선택 필드로 고객에게 전하는 comments를 둘 수 있습니다. 루트에는 그 밖에 선택 필드로 signature(판매자의 전자서명)와 extra(추가 정보)가 있습니다.

vendor 객체의 구성

vendor는 영수증을 발행하는 주체의 정보를 담는 객체로, name(판매자 이름)과 website(웹사이트 URL)가 필수입니다. 선택 필드로 logo(로고 URL), address(주소를 이루는 문자열 배열, 2개 이상 6개 이하), contact(담당자 정보)가 있습니다. contact 객체는 필수 필드 없이 name(담당자 이름), position(직책), tel(전화번호), email(이메일, email 형식), address(담당자 주소, 문자열 2개 이상 6개 이하)를 담을 수 있습니다.

품목(item.json) 스키마

각 품목은 별도 스키마(item.json#)로 정의되며 id, title, date, amount, tax, quantity 여섯 필드가 필수입니다. id는 상품이나 서비스의 고유 식별자, title은 이름, date는 공급일(date 형식), amount는 세금을 뺀 단가(숫자), quantity는 수량(정수)입니다. tax는 배열이며 각 항목이 name(세금 이름, GST나 PST 등), rate(퍼센트로 표시한 세율), amount(부과된 세금 총액)를 필수로 갖는 객체입니다. 선택 필드로는 description(설명), link(상품 페이지 URL), contract(외부 계약서의 URL 또는 해시), serial_number(일련번호)가 있습니다.

기존 NFT 도구와의 호환과 서명

이 스키마는 ERC-721의 메타데이터 확장(Metadata extension)을 따르므로, 기존에 NFT를 보여 주던 도구가 이 영수증도 그대로 표시할 수 있습니다. 새로 추가된 receipt 속성이 영수증 구조를 담고 signature 속성은 판매자가 영수증 데이터에 전자서명을 하고 싶을 때 선택적으로 사용합니다. 하위 호환성 측면에서는 ERC-721의 두 선택 확장인 Metadata, Enumerable 모두와 호환됩니다. 이 제안의 상태는 Final로 확정된 표준입니다.

쓸 때 주의할 점

ERC 원문 · ← ERCs