ERC-7053 상호운용 디지털 미디어 색인 (Interoperable Digital Media Indexing)

Final · 이름·메타데이터 · 2023-05-22 작성

디지털 미디어 파일마다 내용에서 만든 콘텐츠 식별자(CID)를 붙이고 Commit 이벤트로 체인에 기록해 여러 컨트랙트와 EVM 호환 체인에서 미디어의 이력을 찾고 검증할 수 있게 하는 색인 표준입니다.

왜 필요한가

인터넷에서 디지털 미디어 파일이 차지하는 비중은 크지만 콘텐츠를 가리키는 보편적이고 상호운용 가능한 식별자가 없습니다. 같은 미디어라도 시스템마다 다른 방식으로 기록하기 때문에 정보가 조각나고 특정 미디어의 메타데이터와 저장 위치, 출처(provenance)를 찾기가 복잡해집니다. 디지털 미디어의 양이 계속 늘어날수록 이 문제는 점점 더 심각해집니다. 이 표준은 탈중앙 콘텐츠 식별자(CID)와 Commit 이벤트를 결합해 EVM 호환 네트워크 전반에서 디지털 미디어를 같은 방식으로 색인하는 방법을 정합니다. 사용자는 미디어가 만들어진 때부터 현재까지의 전체 이력을 볼 수 있어 투명성이 높아지고 어떤 디지털 미디어 시스템이든 공통 인터페이스로 콘텐츠 정보를 색인하고 검색할 수 있게 됩니다.

구현해야 하는 것

심층 설명

표준이 다루는 범위

이 표준은 여러 스마트 컨트랙트와 EVM 호환 블록체인에 걸쳐 디지털 미디어 정보를 조직하고 검색하는 상호운용 색인 방법을 정의합니다. 같은 디지털 콘텐츠에 관한 모든 데이터를 하나로 연결해 저장 위치와 핵심 정보를 더 쉽게 찾게 하고 컨트랙트와 체인을 가로지르는 데이터의 추적과 검증을 돕는 것이 목적입니다. 어떤 디지털 미디어 시스템이든 쓸 수 있는 공통 인터페이스를 만들어 각 시스템이 자기 콘텐츠를 표준 방식으로 색인하고 검색하도록 합니다.

콘텐츠 식별자 요건

이 표준에서 콘텐츠 식별자는 디지털 미디어의 내용을 암호학적 해시 함수에 통과시켜 만든 콘텐츠 주소입니다. 색인 과정을 시작하기 전에 파일마다 고유한 콘텐츠 식별자를 반드시(REQUIRED) 만들어야 합니다. 이 식별자는 탈중앙 저장소에서 쓰는 콘텐츠 식별자와 같아야 하며 식별자 하나로 그 미디어의 메타데이터, 미디어 정보, 콘텐츠 파일 자체에 접근할 수 있어야 합니다. 내용이 같은 파일은 어디서 계산하든 같은 식별자가 나오므로, 이 식별자가 시스템을 넘나들며 같은 콘텐츠의 기록을 연결하는 공통 키 역할을 합니다.

commit 함수와 Commit 이벤트

commit 함수는 assetCid와 commitData 두 문자열을 받습니다. assetCid는 커밋 대상 자산의 콘텐츠 식별자이고 commitData는 그 커밋에 붙이는 데이터입니다. 호출하면 Commit 이벤트를 발생시키고 해당 assetCid에 대한 recordLogs 매핑에 커밋이 일어난 블록 번호를 기록한 뒤 그 블록 번호를 반환합니다. Commit 이벤트에는 커밋을 수행한 계정 주소인 recorder, 자산의 콘텐츠 식별자인 assetCid, 커밋 데이터인 commitData가 담기며 recorder와 assetCid는 indexed로 선언되어 있습니다.

CID를 쓰는 이유

원문은 CID 채택의 이점을 두 가지로 설명합니다. 첫째는 데이터 무결성 강화입니다. CID는 콘텐츠의 암호학적 해시이므로 고유성이 보장되고 위조를 막을 수 있으며 콘텐츠가 있으면 CID를 구해 그 콘텐츠에 연결된 정보를 검색할 수 있습니다. 둘째는 데이터 이동성입니다. CID 덕분에 디지털 미디어 콘텐츠를 다른 시스템으로 옮길 때 재인코딩이나 프로토콜 재설정이 필요 없습니다. 예를 들어 Commit 이벤트보다 먼저 만들어진 NFT라도 tokenURI가 가리키는 파일을 같은 방식으로 변환하면 일관된 식별 방식으로 색인할 수 있습니다.

참조 구현 CommitRegister

참조 구현인 CommitRegister 컨트랙트는 commitLogs라는 공개 매핑(string에서 uint 배열)을 둡니다. commit 함수는 Commit 이벤트를 발생시킨 뒤 commitLogs[assetCid]에 block.number를 추가하고 그 값을 반환합니다. getCommits 함수는 특정 assetCid로 기록된 블록 번호 목록을 돌려주므로, 이 번호들을 따라가면 해당 미디어에 어떤 커밋이 언제 있었는지 확인할 수 있습니다. 구현은 OpenZeppelin의 ECDSA와 Initializable을 가져오고 initialize 함수를 두는 형태로 작성되어 있습니다.

쓸 때 주의할 점

ERC 원문 · ← ERCs