ERC-7588 블롭 거래 메타데이터 표준 (Blob Transactions Metadata JSON Schema)
Final · 기타 · 2024-01-01 작성
블롭 거래의 data 필드에 블롭의 작성자, 설명, 파일 형식 같은 정보를 JSON으로 적어 두는 방법을 정합니다. 블롭 조회 서비스와 저장 앱이 블롭의 내용을 쉽게 파악할 수 있게 됩니다.
왜 필요한가
블롭(blob)은 EIP-4844가 도입한 큰 데이터 묶음으로, 주로 롤업(rollup)이 레이어 2 거래 기록을 이더리움에 올릴 때 씁니다. 그런데 블롭 자체에는 그 내용이 무엇인지 설명하는 자리가 없습니다. 롤업은 자기가 올린 블롭을 스스로 관리하니 문제가 없지만 포털 네트워크(Portal Network)나 blobscan처럼 지금까지 올라온 모든 블롭을 모아 색인하고 검색 서비스를 제공하는 제3자 입장에서는 누가 무엇을 올렸는지 알기 어렵습니다. 블롭 거래로 사용자 데이터를 올리고 체인 밖에 보관했다가 나중에 꺼내 쓰는 분산 저장 앱도 데이터의 종류를 표시할 방법이 필요합니다. 블롭에 작성자, 설명, 파일 형식 같은 정보를 붙일 수 있으면 블롭의 가시성과 감사 가능성이 크게 좋아지고 인스크립션 같은 새로운 활용의 길도 열립니다.
심층 설명
메타데이터 JSON 스키마
메타데이터는 정해진 JSON 스키마를 따르는 객체입니다. originator는 블롭을 만든 주체를 식별하는 문자열이고 description은 블롭 내용에 대한 설명입니다. content_type은 블롭의 MIME 타입으로, RFC 2046에 정의된 형식을 써야 합니다. extras에는 블롭과 관련한 동적인 추가 정보를 담습니다. blobs는 i번째 블롭의 메타데이터를 담는 배열로, 선택 사항이며 제공하면 상위 속성을 덮어씁니다(overlay). 배열의 각 항목에는 해당 블롭의 description, content_type, extras를 적을 수 있어 블롭마다 다른 설명과 형식을 표시할 수 있습니다.
두 블롭 예시
원문은 데이터 가용성 샘플링(data availability sampling)을 설명하는 두 블롭을 올리는 예를 듭니다. 메타데이터의 originator는 Vitalik Buterin, 전체 description은 그림에 대한 설명이고, blobs 배열에서 첫 블롭은 content_type이 text/plain인 설명 글로, 둘째 블롭은 content_type이 image/png인 이미지로 표시합니다. 둘째 블롭의 이미지 데이터는 base64 형식의 RFC 2397 데이터 URL로 담는다고 설명합니다. 이렇게 한 거래에 성격이 다른 블롭이 섞여 있을 때 blobs 배열로 각각 설명합니다.
data 필드 인코딩 방식
블롭 거래의 calldata, 즉 data 필드에 메타데이터 JSON 객체의 문자열 표현을 UTF-8로 인코딩해 넣습니다. 거래의 나머지 구조는 EIP-4844 그대로입니다. 원문 예시 거래를 보면 type이 eip4844이고 blobVersionedHashes에 각 블롭의 버전 해시가, sidecars에 블롭 본문(blob)과 KZG 커밋(commitment), 증명(proof)이 담기며 maxFeePerBlobGas 같은 블롭 수수료 필드도 함께 들어갑니다. 이 표준은 그중 평소 비어 있던 data 필드만 활용합니다.
왜 data 필드를 쓰는가
이더리움 거래는 종류에 따라 data 필드의 쓰임이 다릅니다. 일반 송금 거래는 보통 data를 쓰지 않고 컨트랙트 배포 거래는 바이트코드와 생성자 인자를, 함수 호출 거래는 함수 시그니처와 매개변수를 담습니다. 블롭 거래는 블롭을 올리는 용도라서 평소 data 필드가 비어 있으므로, 이 빈자리에 메타데이터를 담자는 것이 이 제안입니다. 다만 블롭 거래가 컨트랙트 함수를 호출해야 하는 경우도 있습니다. 예를 들어 분산 저장 앱이 블롭의 버전 해시와 MIME 타입을 컨트랙트에 기록하려고 data 필드로 함수를 호출할 수 있는데, 이런 사용 방식은 이 EIP가 다루지 않습니다.
EIP-4844와의 호환성
이 표준은 블롭 거래의 구조나 기능을 바꾸지 않고 선택적인 메타데이터 필드만 더하므로 EIP-4844와 역호환됩니다. 메타데이터는 거래의 실행이나 유효성에 영향을 주지 않는 순수 정보용 필드이고 합의 계층이 그 내용을 검증하거나 강제하지도 않습니다. 따라서 이 표준을 따르지 않는 기존 블롭 거래도 그대로 유효하고 메타데이터를 읽지 않는 도구도 영향을 받지 않습니다. 이 제안의 상태는 Final로 확정되었습니다.
쓸 때 주의할 점
- 메타데이터는 검증되지 않습니다: 합의 계층이 메타데이터를 확인하거나 강제하지 않으므로 내용이 부정확하거나 거짓일 수 있습니다. 중요하거나 민감한 작업에서 메타데이터에 의존하지 말고 블롭의 내용과 출처를 항상 직접 확인해야 합니다.
- 악성 내용이 들어올 수 있습니다: 메타데이터에 스팸, 피싱, 악성코드 같은 해로운 데이터가 담길 수 있습니다. 메타데이터를 그대로 믿거나 실행하지 말고 사용하기 전에 검사하고 정제해야 합니다.
- 가스 비용이 늘 수 있습니다: data 필드에 담는 데이터가 늘어나는 만큼 블롭 거래의 가스 비용이 커질 수 있습니다. 이득과 비용을 따져서 메타데이터의 크기와 형식을 최적화해야 합니다.