πŸ‡°πŸ‡· CIP-0068 (데이텀 메타데이터 ν‘œμ€€)

CIP 제λͺ© μ €μž 주석-URI 단계 μœ ν˜• 생성 포슀트 νžˆμŠ€ν† λ¦¬ λΌμ΄μ„ μŠ€
68 데이텀 메타데이터 ν‘œμ€€ μ•Œλ ˆμ‚°λ“œλ‘œ μ½˜λΌλ“œ alessandro.konrad@live.de, ν† λ§ˆμŠ€ λ²¨λ ˆμΏ ν”„ thomas.vellekoop@iohk.io μ œμ•ˆ 정보 제곡 2022-07-13 CC-BY-4.0

κ°œμš”

이 μ œμ•ˆμ€ NFT뿐만 μ•„λ‹ˆλΌ λͺ¨λ“  μžμ‚° ν΄λž˜μŠ€μ— λŒ€ν•œ 좜λ ₯ 데이텀을 μ‚¬μš©ν•˜λŠ” λ„€μ΄ν‹°λΈŒ μžμ‚°μ— λŒ€ν•œ 메타데이터 ν‘œμ€€μ„ μ •μ˜ν•©λ‹ˆλ‹€.

동기

이 μ œμ•ˆμ€ CIP-0025의 λͺ‡ 가지 단점을 λ‹€λ£Ήλ‹ˆλ‹€.

  • ν”„λ‘œκ·Έλž˜λ° κ°€λŠ₯μ„±μ˜ λΆ€μ‘±;
  • 메타데이터 μ—…λ°μ΄νŠΈ/κ°œμ„ μ˜ 어렀움;
  • Plutus 밸리데이터 λ‚΄μ—μ„œ 검사할 수 μ—†λŠ” 메타데이터…

μ΄λŸ¬ν•œ 단점 외에도 CIP-0025λŠ” λͺ‡ 가지 μ„€κ³„μƒμ˜ 결함이 μžˆμŠ΅λ‹ˆλ‹€. CIP-0025λ₯Ό λͺ¨λ₯΄λŠ” μ‚¬λžŒλ“€μ΄λ‚˜ λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ λ―ΌνŒ…(minting)을 ν•˜λ €λŠ” μ‚¬λžŒλ“€, λ˜λŠ” λ‹€λ₯Έ 메타데이터 ν˜•μ‹/λ©”μ»€λ‹ˆμ¦˜μ„ μ‚¬μš©ν•˜κ³ μž ν•˜λŠ” 경우, 이 ν‘œμ€€μ΄ 이미 λŒ€λΆ€λΆ„μ˜ ν”Œλž«νΌμ—μ„œ 기본적으둜 메타데이터λ₯Ό ν•΄μ„ν•˜κΈ° λ•Œλ¬Έμ— 메타데이터 μŠ€ν‘Έν•‘(spoofing, μœ„μž₯)에 λŒ€ν•œ ν”„λ‘œν† μ½œμ„ μ—΄μ–΄λ†“κ²Œ λ©λ‹ˆλ‹€. 이 ν‘œμ€€μ€ ν”„λ‘œν† μ½œ λ ˆλ²¨μ—μ„œ κ°•μ œλ‘œ μ μš©λ˜μ§€ μ•ŠμœΌλ―€λ‘œ, λͺ¨λ‘κ°€ 이λ₯Ό μΈμ‹ν•˜κ±°λ‚˜ κ·œμΉ™μ„ λ”°λ₯΄μ§€ μ•Šμ„ κ°€λŠ₯성이 μžˆμŠ΅λ‹ˆλ‹€. λ™μ‹œμ—, λͺ¨λ“  μ‚¬λžŒλ“€μ΄ CIP-0025의 κ·œμΉ™μ„ λ”°λ₯΄λ„둝 κ°•μ œν•œλ‹€λ©΄, 원μž₯의 λŠ₯λ ₯을 μ œν•œν•˜κ³  μ œμ•½μ„ κ°€ν•˜κ²Œ λ©λ‹ˆλ‹€.

이 ν‘œμ€€μ€ μ΄λŸ¬ν•œ λ¬Έμ œλ“€μ„ ν•΄κ²°ν•˜κ³  NFT뿐만 μ•„λ‹ˆλΌ κ·Έ 이후 λ‚˜νƒ€λ‚  수 μžˆλŠ” λͺ¨λ“  μžμ‚° ν΄λž˜μŠ€μ— λŒ€ν•œ λ§Žμ€ μž₯점을 μ œκ³΅ν•©λ‹ˆλ‹€. λ˜ν•œ, 이 CIPλŠ” 지갑과 같은 제3μžκ°€ ν•΄λ‹Ή ν† ν°μ˜ μ’…λ₯˜λ₯Ό μ‰½κ²Œ νŒŒμ•…ν•  수 μžˆλŠ” 방법을 μ†Œκ°œν•  κ²ƒμž…λ‹ˆλ‹€.

λͺ…μ„Έ

κ³ λ € 사항

기본적인 μ•„μ΄λ””μ–΄λŠ” 두 개의 μžμ‚°μ„ λ°œν–‰ν•˜λŠ” 것이며, ν•œ μžμ‚°μ€ λ‹€λ₯Έ μžμ‚°μ„ μ°Έμ‘°ν•©λ‹ˆλ‹€. 이 두 가지λ₯Ό μ°Έμ‘° NFT(reference NFT) 및 μ‚¬μš©μž 토큰(user token)이라고 ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œ μ‚¬μš©μž 토큰은 전솑 κ°€λŠ₯ν•˜κ³  λͺ¨λ“  값을 λ‚˜νƒ€λ‚΄λŠ” NFT, FT λ˜λŠ” 기타 μžμ‚° 클래슀일 수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ‚¬μš©μž 토큰은 μ‚¬μš©μžμ˜ 지갑에 μžˆλŠ” μ‹€μ œ μžμ‚°μž…λ‹ˆλ‹€.

μ‚¬μš©μž 토큰에 λŒ€ν•œ 메타데이터λ₯Ό 찾으렀면 μ°Έμ‘° NFTκ°€ 잠겨 μžˆλŠ” 좜λ ₯을 μ°Ύμ•„μ•Ό ν•©λ‹ˆλ‹€. 이것이 ꡬ체적으둜 μ–΄λ–»κ²Œ μ΄λ£¨μ–΄μ§€λŠ”μ§€λŠ” μ•„λž˜μ—μ„œ λͺ…ν™•ν•΄μ§ˆ κ²ƒμž…λ‹ˆλ‹€. λ˜ν•œ 이 좜λ ₯μ—λŠ” 메타데이터λ₯Ό μ €μž₯ν•˜λŠ” 데이텀이 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 이 μ ‘κ·Ό λ°©μ‹μ˜ μž₯점은 μžμ‚° λ°œν–‰μžκ°€ μ°Έμ‘° NFTκ°€ μžˆλŠ” νŠΈλžœμž­μ…˜ 좜λ ₯을 잠그고 μΆ”κ°€λ‘œ μ²˜λ¦¬ν•˜λŠ” 방법을 κ²°μ •ν•  수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. λ°œν–‰μžκ°€ μ™„μ „ν•œ λΆˆλ³€ 메타데이터λ₯Ό μ›ν•˜λŠ” 경우, μ°Έμ‘° NFTλ₯Ό μ†ŒλΉ„ν•  수 μ—†λŠ” 슀크립트(unspendable script)의 μ£Όμ†Œμ—μ„œ μž κΈ€ 수 μžˆμŠ΅λ‹ˆλ‹€. λ§ˆμ°¬κ°€μ§€λ‘œ, λ°œν–‰μžκ°€ NFT/FTλ₯Ό κ°œμ„ μ‹œν‚€κΈ°λ₯Ό μ›ν•˜κ±°λ‚˜ 메타데이터λ₯Ό μ—…λ°μ΄νŠΈν•˜κΈ° μœ„ν•œ λ©”μ»€λ‹ˆμ¦˜μ„ μ›ν•˜λŠ” 경우, λ°œν–‰μžκ°€ κ²°μ •ν•˜λŠ” μž„μ˜μ˜ 둜직으둜 μ°Έμ‘° NFTλ₯Ό 슀크립트 μ£Όμ†Œμ—μ„œ μž κΈ€ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μœΌλ‘œ, κ°€μž₯ μ€‘μš”ν•œ 것은 이 ꡬ성을 μ‚¬μš©ν•˜λ©΄ μ°Έμ‘° μž…λ ₯ CIP-0031을 μ‚¬μš©ν•˜μ—¬ PlutusV2 μŠ€ν¬λ¦½νŠΈμ—μ„œ 메타데이터λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. μ΄λŠ” 토큰 μ˜μ—­μ—μ„œ 더 큰 ν˜μ‹ μ„ 촉진할 κ²ƒμž…λ‹ˆλ‹€.

λ ˆμ΄λΈ”

각 μžμ‚° μ΄λ¦„μ—λŠ” λ ˆμ΄λΈ”μ΄ μ ‘λ‘μ–΄λ‘œ μΆ”κ°€λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. 이 λ ˆμ΄λΈ”μ˜ μ˜λ„λŠ” ν† ν°μ˜ λͺ©μ μ„ μ‹λ³„ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μ°Έμ‘° NFTλŠ” λ ˆμ΄λΈ” 100으둜 μ‹λ³„λ˜λ―€λ‘œ μ°Έμ‘° NFT둜 κ°„μ£Όλ˜λŠ” λͺ¨λ“  토큰은 16μ§„μˆ˜ 000643b0둜 μžμ‚° 이름을 μ‹œμž‘ν•΄μ•Ό ν•©λ‹ˆλ‹€. 이것은 λ ˆμ΄λΈ” μ ‘λ‘μ–΄μ˜ ν˜•μ‹μ„ μ§€μ •ν•˜λŠ” CIP-0067을 λ”°λ¦…λ‹ˆλ‹€.

μžμ‚° μ΄λ¦„μ˜ 예:

asset_name_label asset_name_content resulting_label_hex resulting_content_hex resulting_asset_name_hex
100 GenToken 000643b0 47656e546f6b656e 000643b047656e546f6b656e
100 NeverGonna 000643b0 4e65766572476f6e6e61 000643b04e65766572476f6e6e61
222 GiveYouUp 000de140 47697665596f755570 000de14047697665596f755570

λ‹¨μˆœν™”λ₯Ό μœ„ν•΄, 이 λ¬Έμ„œμ—μ„œλŠ” λ ˆμ΄λΈ” (100) λ˜λŠ” (<label>)을 μ‚¬μš©ν•  κ²ƒμ΄μ§€λ§Œ, CIP-0067 λͺ…μ„Έλ₯Ό 따라야 함을 μ΄ν•΄ν•΄μ£Όμ„Έμš”.

μ°Έμ‘° NFT λ ˆμ΄λΈ”

μ΄λŠ” λ“±λ‘λœ asset_name_label κ°’μž…λ‹ˆλ‹€.

asset_name_label 클래슀 μ„€λͺ…
100 NFT 데이텀이 ν¬ν•¨λœ μŠ€ν¬λ¦½νŠΈμ—μ„œ 잠긴 μ°Έμ‘° NFT

μ œμ•½ 및 쑰건

μ‚¬μš©μž 토큰과 μ°Έμ‘° NFT κ°„ μ˜¬λ°”λ₯Έ 관계λ₯Ό μœ„ν•΄ λͺ‡ 가지 쑰건이 μΆ©μ‘±λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

  • μ‚¬μš©μž 토큰과 μ°Έμ‘° NFTλŠ” λ™μΌν•œ μ •μ±… ID(policy ID) μ•„λž˜μ— μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
  • νŠΉμ • μ‚¬μš©μž 토큰에 λŒ€ν•΄ μ •ν™•νžˆ ν•˜λ‚˜μ˜ μ°Έμ‘° NFTκ°€ μ‘΄μž¬ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • μ‚¬μš©μž 토큰과 κ΄€λ ¨λœ μ°Έμ‘° NFTλŠ” ν‘œμ€€ 넀이밍 νŒ¨ν„΄μ„ 따라야 ν•©λ‹ˆλ‹€. 각각의 μžμ‚° 이름은 ν•΄λ‹Ή asset_name_label둜 μ‹œμž‘ν•˜κ³  μžμ‚° ν΄λž˜μŠ€κ°€ μ •μ˜ν•œ νŒ¨ν„΄μ΄ 이어져야 ν•©λ‹ˆλ‹€. (예: asset_name_label 222)

μœ„μ˜ λ‚΄μš©μ— λŒ€ν•΄ λͺ‡ 가지 μ–ΈκΈ‰ν•˜μžλ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. μ‚¬μš©μž 토큰과 μ°Έμ‘° NFTλŠ” 같은 νŠΈλžœμž­μ…˜μ—μ„œ λ°œν–‰λ  ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€. λ°œν–‰ μˆœμ„œλ„ μ€‘μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  2. λ™μΌν•œ μ°Έμ‘° NFTλ₯Ό μ°Έμ‘°ν•˜λŠ” μ—¬λŸ¬ μ‚¬μš©μž 토큰(μ—¬λŸ¬ μžμ‚° 이름 λ˜λŠ” μˆ˜λŸ‰μ΄ 1보닀 큰 경우)이 μ‘΄μž¬ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

μ°Έμ‘° NFTκ°€ μžˆλŠ” 좜λ ₯의 λ°μ΄ν…€μ—λŠ” μƒμ„±μž 0의 첫 번째 ν•„λ“œμ— 메타데이터가 ν¬ν•¨λ©λ‹ˆλ‹€. 이 μƒμ„±μž(constructor)의 두 번째 ν•„λ“œμ—λŠ” 버전 λ²ˆν˜Έκ°€ μžˆμŠ΅λ‹ˆλ‹€. μ„Έ 번째 ν•„λ“œλŠ” μž„μ˜μ˜ plutus 데이터가 ν—ˆμš©λ©λ‹ˆλ‹€. μ΄λŠ” plutus μŠ€ν¬λ¦½νŠΈμ— κ΄€λ ¨ 데이터λ₯Ό μ „λ‹¬ν•˜λŠ” 데 μœ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

big_int = int / big_uint / big_nint
big_uint = #6.2(bounded_bytes)
big_nint = #6.3(bounded_bytes)

metadata =
  { * metadata => metadata }
  / [ * metadata ]
  / big_int
  / bounded_bytes
  
version = int

; Custom user defined plutus data.
; Setting data is optional, but the field is required
; and needs to be at least Unit/Void: #6.121([])
extra = plutus_data

datum = #6.121([metadata, version, extra])

222 NFT ν‘œμ€€

이 CIPμ—μ„œλŠ” μ°Έμ‘° NFT에 ν•„μš”ν•œ ν‘œμ€€ 외에 두 개의 νŠΉμ • 토큰 ν‘œμ€€μ„ μ†Œκ°œν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œ κ°€λŠ₯성은 λ¬΄ν•œν•˜λ©° FT, λ‹€λ₯Έ NFT, 반 λŒ€μ²΄ κ°€λŠ₯ 토큰(semi fungible tokens) 등에 λŒ€ν•œ 더 λ§Žμ€ ν‘œμ€€μ„ 이 CIP μœ„μ— ꡬ좕할 수 μžˆμŠ΅λ‹ˆλ‹€. 첫 λ²ˆμ§ΈλŠ” λ“±λ‘λœ asset_name_label 접두어 κ°’μœΌλ‘œ μ‹œμž‘ν•˜λŠ” 222 NFT ν‘œμ€€μž…λ‹ˆλ‹€.

asset_name_label 클래슀 μ„€λͺ…
222 NFT CIP-0025 λ‚΄λΆ€ ꡬ쑰λ₯Ό ν™œμš©ν•˜μ—¬ μ‚¬μš©μž 지갑에 보유된 NFT

클래슀

user token은 NFT(λŒ€μ²΄ λΆˆκ°€λŠ₯ν•œ 토큰)λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€ .

νŒ¨ν„΄

μ‚¬μš©μž 토큰과 μ°Έμ‘° NFTλŠ” asset_name_label prefix둜 μ‹œμž‘ν•˜λŠ” λ™μΌν•œ 이름을 κ°€μ Έμ•Όν•©λ‹ˆλ‹€.

예:
user token : (222)Test123
reference NFT :(100)Test123

메타데이터

μ΄λŠ” CIP-0025 ꡬ쑰λ₯Ό λ”°λ₯΄λŠ” λ©”νƒ€λ°μ΄ν„°μ˜ μ €μˆ˜μ€€ ν‘œν˜„μž…λ‹ˆλ‹€. UTF-8 μΈμ½”λ”©λœ λͺ¨λ“  ν‚€ 및 값은 온체인 데이텀을 생성할 λ•Œ 각각의 λ°”μ΄νŠΈ ν‘œν˜„μœΌλ‘œ λ³€ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

files_details = 
  {
    ? name : bounded_bytes, ; UTF-8
    mediaType : bounded_bytes, ; UTF-8
    src : bounded_bytes ; UTF-8
    ; ... Additional properties are allowed
  }

metadata = 
  {
    name : bounded_bytes, ; UTF-8
    image : bounded_bytes, ; UTF-8
    ? mediaType : bounded_bytes, ; UTF-8
    ? description : bounded_bytes, ; UTF-8
    ? files : [* files_details]
    ; ... Additional properties are allowed
  }
  
; Custom user defined plutus data.
; Setting data is optional, but the field is required
; and needs to be at least Unit/Void: #6.121([])
extra = plutus_data

datum = #6.121([metadata, 1, extra]) ; version 1

JSON ν˜•μ‹μ˜ 데이텀 예:

{"constructor" : 0, "fields": [{"map": [{"k": "6E616D65", "v": "5370616365427564"}, {"k": "696D616765", "v": "697066733A2F2F74657374"}]}, {"int": 1}]}

제3자의 메타데이터 쑰회

제3μžκ°€ μ‘°νšŒν•˜λ €λŠ” NFTκ°€ d5e6bf0500378d4f0da4e8dde6becec7621cd8cbf5cbb9b87013d4cc.(222)TestToken이라고 ν• λ•Œ, λ‹€μŒ 단계λ₯Ό λ”°λ¦…λ‹ˆλ‹€.

  1. μ‚¬μš©μž ν† ν°μœΌλ‘œλΆ€ν„° μ°Έμ‘° NFTλ₯Ό κ΅¬μ„±ν•©λ‹ˆλ‹€: d5e6bf0500378d4f0da4e8dde6becec7621cd8cbf5cbb9b87013d4cc.(100)TestToken
  2. μ°Έμ‘° NFTλ₯Ό μ°Ύμ•„μ„œ 이 NFT의 잠긴 좜λ ₯을 μ°ΎμŠ΅λ‹ˆλ‹€.
  3. 좜λ ₯μ—μ„œ 데이텀을 κ°€μ Έμ™€μ„œ μƒμ„±μž 0의 첫 번째 ν•„λ“œλ‘œ λ“€μ–΄κ°€μ„œ 메타데이터λ₯Ό μ‘°νšŒν•©λ‹ˆλ‹€.
  4. JSON으둜 λ³€ν™˜ν•˜κ³  κ°€λŠ₯ν•œ 경우 λͺ¨λ“  λ¬Έμžμ—΄ ν•­λͺ©μ„ UTF-8둜 μΈμ½”λ”©ν•©λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ 16μ§„μˆ˜λ‘œ λ‚¨κ²¨λ‘‘λ‹ˆλ‹€.

Plutus λ°Έλ¦¬λ°μ΄ν„°μ—μ„œ 메타데이터 쑰회

μš°λ¦¬λŠ” ν”Œλ£¨νˆ¬μŠ€ 밸리데이터 μ»¨ν…μŠ€νŠΈμ—μ„œ NFT d5e6bf0500378d4f0da4e8dde6becec7621cd8cbf5cbb9b87013d4cc.(222)TestToken의 메타데이터λ₯Ό κ°€μ Έμ˜€κ³ μž ν•©λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄ λ‹€μŒκ³Ό 같이 ν•©λ‹ˆλ‹€.

  1. μ‚¬μš©μž ν† ν°μ—μ„œ μ°Έμ‘° NFTλ₯Ό κ΅¬μ„±ν•©λ‹ˆλ‹€. : d5e6bf0500378d4f0da4e8dde6becec7621cd8cbf5cbb9b87013d4cc.(100)TestToken (μ˜€ν”„μ²΄μΈ)
  2. μ°Έμ‘° NFTλ₯Ό μ°Ύμ•„ κ·Έ NFT의 잠긴 좜λ ₯을 μ°ΎμŠ΅λ‹ˆλ‹€. (μ˜€ν”„μ²΄μΈ)
  3. νŠΈλžœμž­μ…˜μ—μ„œ ν•΄λ‹Ή 좜λ ₯을 μ°Έμ‘°ν•©λ‹ˆλ‹€. (μ˜€ν”„μ²΄μΈ)
  4. μ°Έμ‘° NFT와 μ‚¬μš©μž ν† ν°μ˜ μ •μ±… ID 및 μžμ‚° 이름(단, asset_name_label 접두어 μ œμ™Έ)이 μΌμΉ˜ν•˜λŠ”μ§€ ν™•μΈν•˜μ—¬ 참쑰된 좜λ ₯의 데이텀이 μœ νš¨ν•œμ§€ κ²€μ¦ν•©λ‹ˆλ‹€. (온체인)

333 NFT ν‘œμ€€

두 번째 μ†Œκ°œλœ ν‘œμ€€μ€ asset_name_label 접두어 κ°’μœΌλ‘œ λ“±λ‘λœ 333 FT ν‘œμ€€μž…λ‹ˆλ‹€.

asset_name_label 클래슀 μ„€λͺ…
333 FT μΉ΄λ₯΄λ‹€λ…Έ μž¬λ‹¨ μ˜€ν”„μ²΄μΈ λ ˆμ§€μŠ€νŠΈλ¦¬ λ‚΄λΆ€ ꡬ쑰λ₯Ό ν™œμš©ν•œ μ‚¬μš©μž 지갑에 보유된 FT

클래슀

user token은 FT(λŒ€μ²΄ κ°€λŠ₯ 토큰)μž…λ‹ˆλ‹€.

νŒ¨ν„΄

μ‚¬μš©μž 토큰과 μ°Έμ‘° NFTλŠ” asset_name_label μ ‘λ‘μ–΄λ‘œ μ‹œμž‘ν•˜λŠ” λ™μΌν•œ 이름을 κ°€μ Έμ•Όν•©λ‹ˆλ‹€.

예:
user token : (333)Test123
reference NFT :(100)Test123

메타데이터

μ΄λŠ” μΉ΄λ₯΄λ‹€λ…Έ μž¬λ‹¨ μ˜€ν”„μ²΄μΈ 메타데이터 λ ˆμ§€μŠ€νŠΈλ¦¬ ꡬ쑰λ₯Ό μ—„κ²©νžˆ λ”°λ₯΄λŠ” λ©”νƒ€λ°μ΄ν„°μ˜ μ €μˆ˜μ€€ ν‘œν˜„μž…λ‹ˆλ‹€. λͺ¨λ“  UTF-8 인코딩 된 킀와 값은 온체인 데이텀을 생성할 λ•Œ ν•΄λ‹Ήν•˜λŠ” λ°”μ΄νŠΈ ν‘œν˜„μœΌλ‘œ λ³€ν™˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

; Explanation here: https://developers.cardano.org/docs/native-tokens/token-registry/cardano-token-registry/

metadata = 
  {
    name : bounded_bytes, ; UTF-8
    description : bounded_bytes, ; UTF-8
    ? ticker: bounded_bytes, ; UTF-8
    ? url: bounded_bytes, ; UTF-8
    ? logo: uri,
    ? decimals: int
    ; ... Additional properties are allowed
  }

; A URI as a UTF-8 encoded bytestring.
; The URI scheme must be one of `https`, `ipfs` or `data`
; Do not encode plain file payloads as URI.
; 'logo' does not follow the explanation of the token-registry, it needs to be a valid URI and not a plain bytestring.
; Only use the following media types: `image/png`, `image/jpeg`, `image/svg+xml`
uri = bounded_bytes

; Custom user defined plutus data.
; Setting data is optional, but the field is required
; and needs to be at least Unit/Void: #6.121([])
extra = plutus_data
  
datum = #6.121([metadata, 1, extra]) ; version 1

JSON ν˜•μ‹μ˜ 데이텀 예:

{"constructor" : 0, "fields": [{"map": [{"k": "6E616D65", "v": "5370616365427564"}, {"k": "6465736372697074696F6E", "v": "54686973206973206D79207465737420746F6B656E"}]}, {"int": 1}]}

제3자의 메타데이터 쑰회

제3μžκ°€ μ‘°νšŒν•˜λ €λŠ” FT d5e6bf0500378d4f0da4e8dde6becec7621cd8cbf5cbb9b87013d4cc.(333)TestToken에 λŒ€ν•΄, λ‹€μŒκ³Ό 같은 단계λ₯Ό 거쳐 μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  1. μ‚¬μš©μž ν† ν°μ—μ„œ μ°Έμ‘° NFT κ΅¬μ„±ν•©λ‹ˆλ‹€.: d5e6bf0500378d4f0da4e8dde6bec7621cd8cbf5cbb9b87013d4cc.(100)TestToken
  2. μ°Έμ‘° NFTλ₯Ό μ°Ύμ•„ 잠겨 μžˆλŠ” 좜λ ₯을 μ°ΎμŠ΅λ‹ˆλ‹€.
  3. 좜λ ₯μ—μ„œ 데이텀을 κ°€μ Έμ˜€κ³  μƒμ„±μž 0의 첫 번째 ν•„λ“œλ‘œ λ“€μ–΄κ°€ 메타데이터λ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€.
  4. JSON으둜 λ³€ν™˜ν•˜κ³  κ°€λŠ₯ν•˜λ©΄ λͺ¨λ“  λ¬Έμžμ—΄ ν•­λͺ©μ„ UTF-8둜 μΈμ½”λ”©ν•©λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ 16μ§„μˆ˜λ‘œ μœ μ§€ν•©λ‹ˆλ‹€.

Plutus λ°Έλ¦¬λ°μ΄ν„°μ—μ„œ 메타데이터 쑰회

ν”Œλ£¨νˆ¬μŠ€ 밸리데이터 μ»¨ν…μŠ€νŠΈμ—μ„œ FT d5e6bf0500378d4f0da4e8dde6becec7621cd8cbf5cbb9b87013d4cc.(333)TestToken의 메타데이터λ₯Ό κ°€μ Έ 였렀고 ν•©λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄ λ‹€μŒμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

  1. μ‚¬μš©μž ν† ν°μ—μ„œ μ°Έμ‘° NFTλ₯Ό κ΅¬μ„±ν•©λ‹ˆλ‹€ : d5e6bf0500378d4f0da4e8dde6becec7621cd8cbf5cbb9b87013d4cc.(100)TestToken (μ˜€ν”„μ²΄μΈ)
  2. μ°Έμ‘° NFTλ₯Ό μ°Ύμ•„ 잠겨 μžˆλŠ” 좜λ ₯을 μ°ΎμŠ΅λ‹ˆλ‹€. (μ˜€ν”„μ²΄μΈ)
  3. νŠΈλžœμž­μ…˜μ—μ„œ 좜λ ₯을 μ°Έμ‘°ν•©λ‹ˆλ‹€. (μ˜€ν”„μ²΄μΈ)
  4. μ°Έμ‘° NFT 및 μ‚¬μš©μž ν† ν°μ˜ μ •μ±… ID와 asset_name_label 접두어가 μ—†λŠ” ν•΄λ‹Ή μžμ‚° 이름이 μΌμΉ˜ν•˜λŠ”μ§€ ν™•μΈν•˜μ—¬ 참쑰된 좜λ ₯의 데이텀이 μœ νš¨ν•œμ§€ κ²€μ¦ν•©λ‹ˆλ‹€. (온체인)

κ·Όκ±°

μ°Έμ‘° NFT와 μ‚¬μš©μž 토큰을 λΆ„λ¦¬ν•˜μ§€ μ•ŠμœΌλ©΄ λͺ¨λ“  μœ μ—°μ„±μ„ μžƒκ²Œ 되며, μ‚¬μš©μž 토큰을 μ΄λ™ν•˜λŠ” 것이 맀우 번거둜울 κ²ƒμž…λ‹ˆλ‹€. μƒˆλ‘œμš΄ 좜λ ₯으둜 μ‚¬μš©μž 토큰을 보내기 μœ„ν•΄ 맀번 메타데이터λ₯Ό μΆ”κ°€ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. λ”°λΌμ„œ 메타데이터와 μ‚¬μš©μž 토큰을 λΆ„λ¦¬ν•˜κ³  메타데이터λ₯Ό λ‹€λ₯Έ UTxO μ•ˆμ— 잠그면 μ‚¬μš©μž 토큰을 자유둭게 이동할 수 μžˆμŠ΅λ‹ˆλ‹€.

메타데이터가 ν¬ν•¨λœ μ˜¬λ°”λ₯Έ UtxOλ₯Ό μ°Έμ‘°ν•˜λ €λ©΄, 인증을 λ°›μ•„μ•Ό ν•©λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ 메타데이터 μŠ€ν‘Έν•‘ 곡격이 κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€. 이λ₯Ό λ‹¬μ„±ν•˜λŠ” ν•œ 가지 방법은 UtxO에 NFT(μ°Έμ‘° NFT)λ₯Ό μΆ”κ°€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 이 NFTλŠ” μ‚¬μš©μž 토큰과 λ™μΌν•œ μ •μ±… ID μ•„λž˜μ—μ„œ ν‘œμ€€μ— μ •μ˜λœ μžμ‚° 이름 νŒ¨ν„΄μ„ 따라야 ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μΆ”κ°€ 데이터 없이 μ°Έμ‘° NFT와 μ‚¬μš©μž 토큰 간에 μ•ˆμ „ν•œ 링크λ₯Ό 생성할 수 있으며 이 μ˜€ν”„μ²΄μΈ 및 μ˜¨μ²΄μΈμ„ ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

링크에 λŒ€ν•œ λ³΄μ•ˆμ€ λ―ΌνŒ… μ •μ±… μžμ²΄μ—μ„œ νŒŒμƒλ˜λ―€λ‘œ, 이 CIPλŠ” μ΅œλŒ€ν•œ 높은 μœ μ—°μ„±μ„ μœ μ§€ν•˜κΈ° μœ„ν•΄ μΈν„°νŽ˜μ΄μŠ€λ§Œ μ •μ˜ν•˜λ―€λ‘œ μ˜¬λ°”λ₯Έ μ œμ•½ 사항과 κ·œμΉ™μ„ 가진 밸리데이터λ₯Ό μž‘μ„±ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

ν•˜μœ„ ν˜Έν™˜μ„±

ν–₯ν›„ λ³€κ²½ 사항과 메타데이터 ν˜Έν™˜μ„±μ„ μœ μ§€ν•˜κΈ° μœ„ν•΄, 데이텀에 version ν•„λ“œλ₯Ό λ„μž…ν•©λ‹ˆλ‹€.

ν™œμ„± λ°©μ•ˆ

  • CIP-0067의 μžμ‚° 이름 λ ˆμ΄λΈ”μ— λŒ€ν•œ λ°”μ΄λ„ˆλ¦¬ 인코딩에 λ™μ˜.
  • 지갑, 탐색기, 도ꡬ, λ―ΌνŒ… ν”Œλž«νΌ 및 기타 제3μžλ‘œλΆ€ν„° 이 CIP에 λŒ€ν•œ 지원 λ°›κΈ°.
  • Lucid (μ˜€ν”„μ²΄μΈ), PlutusTx (온체인)λ₯Ό ν™œμš©ν•œ μ΅œμ†Œν•œμ˜ μ°Έμ‘° κ΅¬ν˜„: κ΅¬ν˜„
  • 이 CIPλ₯Ό μ‚¬μš©ν•˜λŠ” 보닀 μ‹€μš©μ μΈ μ˜€ν”ˆμ†ŒμŠ€ κ΅¬ν˜„/ν”„λ‘œμ νŠΈ.

μ°Έμ‘°

μ €μž‘κΆŒ

이 CIPλŠ” CC-BY-4.0 λΌμ΄μ„ μŠ€μ— 따라 κ³΅κ°œλ©λ‹ˆλ‹€ .


* 원문: CIPs/CIP-0068 at master Β· cardano-foundation/CIPs Β· GitHub