๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ชจ๋“ˆ์€ Story ๋‚ด์—์„œ IP ์ž์‚ฐ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ, ๊ด€๋ฆฌ ๋ฐ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์“ฐ๊ธฐ ์ž‘์—…์„ ์œ„ํ•œ CoreMetadataModule๊ณผ ์ฝ๊ธฐ ์ž‘์—…์„ ์œ„ํ•œ CoreMetadataViewModule์˜ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

IP ์ž์‚ฐ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค:

  • metadataURI: IP ์ž์‚ฐ์˜ ์ƒ์„ธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” URI
  • metadataHash: ๊ฒ€์ฆ ๋ชฉ์ ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•ด์‹œ
  • nftTokenURI: IP ์ž์‚ฐ๊ณผ ์—ฐ๊ด€๋œ NFT์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” URI
  • nftMetadataHash: ๊ฒ€์ฆ์„ ์œ„ํ•œ NFT ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ํ•ด์‹œ
  • registrationDate: IP ์ž์‚ฐ์ด ๋“ฑ๋ก๋œ ์‹œ๊ธฐ
  • owner: IP ์ž์‚ฐ์˜ ํ˜„์žฌ ์†Œ์œ ์ž

CoreMetadataModule (์“ฐ๊ธฐ ์ž‘์—…)

CoreMetadataModule.sol์€ IP ์ž์‚ฐ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” statefulํ•˜๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฃผ์š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • IP ์ž์‚ฐ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ URI ์„ค์ • ๋ฐ ์—…๋ฐ์ดํŠธ
  • NFT ํ† ํฐ URI ์„ค์ • ๋ฐ ์—…๋ฐ์ดํŠธ
  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋ณ€์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋™๊ฒฐ
  • ๊ฒ€์ฆ์„ ์œ„ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•ด์‹œ ๊ด€๋ฆฌ

์ด ๋ชจ๋“ˆ์€ IP ์ž์‚ฐ์˜ ์ €์žฅ์†Œ์— ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์—ฌ ๋‹ค๋ฅธ ๋ชจ๋“ˆ๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์„ค์ •

IP ์ž์‚ฐ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด ํ˜ธ์ถœ์ž๊ฐ€ ์ ์ ˆํ•œ ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. CoreMetadataModule์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์„ค์ •์„ ์œ„ํ•œ ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • setMetadataURI: IP metadataURI์™€ ๊ทธ ํ•ด์‹œ๋งŒ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค
  • updateNftTokenURI: NFT ํ† ํฐ URI์™€ ๊ทธ ํ•ด์‹œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค
  • setAll: ๋ชจ๋“  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†์„ฑ์„ ํ•œ ๋ฒˆ์— ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค

๋‹ค์Œ์€ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค:

solidity
// Set the metadata URI and hash
coreMetadataModule.setMetadataURI(
    ipAssetAddress,
    "https://example.com/metadata/asset123",
    keccak256("metadata content hash")
);

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋™๊ฒฐ

CoreMetadataModule์€ IP ์ž์‚ฐ ์†Œ์œ ์ž๊ฐ€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ฒฐํ•˜์—ฌ ๋ถˆ๋ณ€์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ ๋™๊ฒฐ๋˜๋ฉด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์–ด IP ์ž์‚ฐ ์ •๋ณด์˜ ์˜๊ตฌ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ฒฐํ•˜๋ ค๋ฉด:

solidity
// Make the metadata immutable
coreMetadataModule.freezeMetadata(ipAssetAddress);

๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ๋™๊ฒฐ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

solidity
// Check if metadata is frozen
bool isFrozen = coreMetadataModule.isMetadataFrozen(ipAssetAddress);

CoreMetadataViewModule (์ฝ๊ธฐ ์ž‘์—…)

CoreMetadataViewModule.sol์€ CoreMetadataModule์— ์˜ํ•ด ์ €์žฅ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ๊ธฐ ์ „์šฉ ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. ์ด๋Š” View Module ํŒจํ„ด์„ ๋”ฐ๋ฅด๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฃผ์š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ URI ๋ฐ ํ•ด์‹œ ๊ฒ€์ƒ‰
  • NFT ํ† ํฐ URI ๋ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•ด์‹œ ๊ฒ€์ƒ‰
  • ๋ชจ๋“  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†์„ฑ์ด ํฌํ•จ๋œ ํ˜•์‹ํ™”๋œ JSON ๋ฌธ์ž์—ด ์ƒ์„ฑ
  • ๋“ฑ๋ก ๋‚ ์งœ ๋ฐ ์†Œ์œ ๊ถŒ ์ •๋ณด ํ™•์ธ

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰

CoreMetadataViewModule์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • getCoreMetadata: ๋ชจ๋“  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋‹จ์ผ ๊ตฌ์กฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค
  • getMetadataURI: ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ URI๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค
  • getNftTokenURI: NFT ํ† ํฐ URI๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค
  • getJsonString: ๋ชจ๋“  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ํ˜•์‹ํ™”๋œ JSON ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค

๋‹ค์Œ์€ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค:

solidity
// Get the metadata URI
string memory uri = coreMetadataViewModule.getMetadataURI(ipAssetAddress);

// Get all metadata in one call
CoreMetadata memory metadata = coreMetadataViewModule.getCoreMetadata(ipAssetAddress);

// Get a JSON representation of all metadata
string memory jsonMetadata = coreMetadataViewModule.getJsonString(ipAssetAddress);

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ชจ๋“ˆ์€ IP ์ž์‚ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•˜์—ฌ ์ง€์  ์žฌ์‚ฐ์— ๋Œ€ํ•œ ์ค‘์š”ํ•œ ์ •๋ณด๊ฐ€ ์ ์ ˆํžˆ ๊ธฐ๋ก๋˜๊ณ , ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ•„์š”ํ•  ๋•Œ ๋ถˆ๋ณ€์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.