우리는 아직 IPA 메타데이터 표준을 정의하는 최선의 방법을 찾고 있습니다. 투명성을 위해 다음 문서는 지금까지의 우리의 생각이지만, 향후 버전을 출시함에 따라 변경될 수 있습니다.

이것은 IP 자산과 연관된 JSON 메타데이터로, IP 계정 내부에 저장됩니다. 메타데이터를 설정하려면 IP 계정 내에서 setMetadata(...) 를 호출해야 하며, 그 다음 metadata() 를 호출하여 읽을 수 있습니다.

속성 및 구조

아래는 IP 메타데이터에 제공해야 할 중요한 속성들입니다. 필수 항목 열은 특정 필드가 무엇에 필요한지를 나타냅니다:

  • 🔍 Story Explorer - 이 필드는 Story Explorer에서 IP를 표시하는 데 도움이 됩니다
  • 🕵️ 상업적 침해 확인 - 이 필드는 IP가 상업적인 경우 (즉, commercialUse = true 라이선스 조건이 첨부된 경우) 필요합니다. 우리는 이 필드들을 사용하여 IP에 대한 침해 확인을 실행할 것입니다.
  • 🤖 AI 에이전트 - AI 에이전트와 관련된 메타데이터 표시에 사용됨
속성 이름유형설명필수 항목
titlestringIP의 제목🔍 Story Explorer
descriptionstringIP의 설명🔍 Story Explorer
createdAtstringIP가 생성된 날짜/시간 (ISO8601 또는 유닉스 형식). 이 필드는 온체인에 없는 역사적 날짜를 지정하는 데 사용할 수 있습니다. 예를 들어, Harry Potter는 6월 26일에 출판되었습니다.🔍 Story Explorer
imagestringIP의 이미지. 오디오 자산의 경우 권장되는 썸네일 종횡비는 1:1입니다. 비디오 자산의 경우 16:9입니다.🔍 Story Explorer
imageHashstringSHA-256 해싱 알고리즘을 사용한 image의 해시. 여기에서 그 방법을 확인하세요.🔍 Story Explorer
creatorsIpCreator[]창작자에 대한 정보 배열. 아래에 정의된 유형 참조🔍 Story Explorer
mediaUrlstring침해 확인에 사용되며, 실제 미디어(예: 이미지 또는 오디오)를 가리킵니다. 오디오 자산의 경우 권장되는 썸네일 종횡비는 1:1입니다. 비디오 자산의 경우 16:9입니다.🕵️ 상업적 침해 확인
mediaHashstringSHA-256 해싱 알고리즘을 사용한 미디어의 해시된 문자열. 여기에서 그 방법을 확인하세요.🕵️ 상업적 침해 확인
mediaTypestring미디어 유형(오디오, 비디오, 이미지), mimeType을 기반으로 함. 허용된 미디어 유형은 여기를 참조하세요.🕵️ 상업적 침해 확인
aiMetadataAIMetadataAI 에이전트 메타데이터 등록 및 표시에 사용됩니다. 아래에 정의된 유형 참조🤖 AI 에이전트
N/AN/A다른 값들도 포함할 수 있습니다.N/A

유형 정의

다음은 메타데이터에 사용된 복잡한 유형에 대한 유형 정의입니다:

type IpCreator = {
  name: string;
  address: Address;
  contributionPercent: number; // add up to 100
  description?: string;
  image?: string;
  socialMedia?: IpCreatorSocial[];
  role?: string;
};

type IpCreatorSocial = {
  platform: string;
  url: string;
};

미디어 유형

다음은 에 허용되는 미디어 유형입니다 mediaType field:

미디어 유형설명
image/jpegJPEG 이미지
image/pngPNG 이미지
image/apng애니메이션 PNG 이미지
image/avifAV1 이미지 파일 형식
image/gifGIF 이미지
image/svg+xmlSVG 이미지
image/webpWebP 이미지
audio/wavWAV 오디오
audio/mpegMP3 오디오
audio/flacFLAC 오디오
audio/aacAAC 오디오
audio/oggOGG 오디오
audio/mp4MP4 오디오
audio/x-aiffAIFF 오디오
audio/x-ms-wmaWMA 오디오
audio/opusOpus 오디오
video/mp4MP4 비디오
video/webmWebM 비디오
video/quicktimeQuickTime 비디오

콘텐츠 해싱

콘텐츠를 해싱하여 imageHash 또는 mediaHash 필드에 사용하려면 SHA-256 해싱 알고리즘을 사용할 수 있습니다. 다음은 JavaScript에서 이를 수행하는 방법의 예시입니다:

import { toHex, Hex } from "viem";

// get hash from a file
async function getFileHash(file: File): Promise<Hex> {
  const arrayBuffer = await file.arrayBuffer();
  const hashBuffer = await crypto.subtle.digest("SHA-256", arrayBuffer);
  return toHex(new Uint8Array(hashBuffer), { size: 32 });
}

// get hash from a url
async function getHashFromUrl(url: string): Promise<Hex> {
  const response = await axios.get(url, { responseType: "arraybuffer" });
  const buffer = Buffer.from(response.data);
  return "0x" + createHash("sha256").update(buffer).digest("hex");
}

사용 사례 예시

이것은 메인넷에 등록된 공식 Ippy 마스코트입니다. 우리의 프로토콜 탐색기에서 here에서 볼 수 있습니다.

{
  "title": "Ippy",
  "description": "Official mascot of Story.",
  "createdAt": "1728401700",
  "image": "https://ipfs.io/ipfs/QmSamy4zqP91X42k6wS7kLJQVzuYJuW2EN94couPaq82A8",
  "imageHash": "0x21937ba9d821cb0306c7f1a1a2cc5a257509f228ea6abccc9af1a67dd754af6e",
  "mediaUrl": "https://ipfs.io/ipfs/QmSamy4zqP91X42k6wS7kLJQVzuYJuW2EN94couPaq82A8",
  "mediaHash": "0x21937ba9d821cb0306c7f1a1a2cc5a257509f228ea6abccc9af1a67dd754af6e",
  "mediaType": "image/png",
  "creators": [
    {
      "name": "Story Foundation",
      "address": "0x67ee74EE04A0E6d14Ca6C27428B27F3EFd5CD084",
      "description": "The World's IP Blockchain",
      "contributionPercent": 100,
      "socialMedia": [
        {
          "platform": "Twitter",
          "url": "https://twitter.com/storyprotocol"
        },
        {
          "platform": "Telegram",
          "url": "https://t.me/StoryAnnouncements"
        },
        {
          "platform": "Website",
          "url": "https://story.foundation"
        },
        {
          "platform": "Discord",
          "url": "https://discord.gg/storyprotocol"
        },
        {
          "platform": "YouTube",
          "url": "https://youtube.com/@storyFDN"
        }
      ]
    }
  ],
  "tags": ["Ippy", "Story", "Story Mascot", "Mascot", "Official"], // experimental field
  "ipType": "Character" // experimental field
}

선택적 속성

다음 속성들은 선택사항이지만 IP 자산에 대한 추가적인 맥락을 제공할 수 있습니다:

우리는 아직 IPA 메타데이터 표준을 정의하는 최선의 방법을 찾고 있습니다. 아래의 필드들은 언젠가 변경되거나 제거될 수 있습니다.

속성 이름유형설명
ipTypestringIP 자산의 유형으로, 제작자가 임의로 정의할 수 있습니다. 예: “캐릭터”, “챕터”, “위치”, “아이템”, “음악” 등
relationshipsIpRelationship[]IPA의 직접적인 부모 자산과의 상세한 관계 정보, 예를 들어 APPEARS_IN, FINETUNED_FROM 등. 더 많은 예시는 here에서 확인하세요.
watermarkImagestring워터마크가 이미 적용된 별도의 이미지입니다. 이를 통해 이 이미지를 사용하기로 선택한 앱들이 워터마크가 적용된 버전의 이미지를 렌더링할 수 있습니다.
mediaIpMedia[]지원 미디어의 배열. 미디어 유형은 아래에 정의되어 있습니다.
appStoryApp이는 Story에서 직접 검증된 애플리케이션에 할당됩니다(현재는 요청 기반). 각 App ID를 이름에 매핑할 것입니다.
tagsstring[]이 IPA를 표면화하는 데 도움이 될 수 있는 태그들
robotTermsIPRobotTerms특정 에이전트에 대해 훈련 금지를 설정할 수 있습니다
해당 없음해당 없음다른 값들도 포함할 수 있습니다.

유형 정의

type IpRelationship = {
  parentIpId: Address;
  type: string; // see "Relationship Types" docs below
};

관계 유형

속성에 사용할 수 있는 다양한 관계 유형입니다.relationships 속성.

스토리 관계

  1. APPEARS_IN - 캐릭터가 챕터에 등장합니다.

  2. BELONGS_TO - 챕터가 책에 속합니다.

  3. PART_OF - 책이 시리즈의 일부입니다.

  4. CONTINUES_FROM - 챕터가 이전 챕터에서 이어집니다.

  5. LEADS_TO - 사건이 결과로 이어집니다.

  6. FORESHADOWS - 사건이 미래의 발전을 암시합니다.

  7. CONFLICTS_WITH - 캐릭터가 다른 캐릭터와 갈등합니다.

  8. RESULTS_IN - 결정이 중요한 변화를 초래합니다.

  9. DEPENDS_ON - 서브플롯이 메인 플롯에 의존합니다.

  10. SETS_UP - 프롤로그가 이야기를 설정합니다.

  11. FOLLOWS_FROM - 챕터가 이전 챕터에 이어집니다.

  12. REVEALS_THAT - 반전이 예상치 못한 일이 일어났음을 드러냅니다.

  13. DEVELOPS_OVER - 캐릭터가 이야기 전반에 걸쳐 발전합니다.

  14. INTRODUCES - 챕터는 새로운 캐릭터나 요소를 INTRODUCES합니다.

  15. RESOLVES_IN - 갈등은 특정 결과로 RESOLVES_IN됩니다.

  16. CONNECTS_TO - 주제는 주요 내러티브와 CONNECTS_TO됩니다.

  17. RELATES_TO - 서브플롯은 중심 주제와 RELATES_TO됩니다.

  18. TRANSITIONS_FROM - 장면은 한 배경에서 다른 배경으로 TRANSITIONS_FROM합니다.

  19. INTERACTED_WITH - 캐릭터는 다른 캐릭터와 INTERACTED_WITH합니다.

  20. LEADS_INTO - 사건은 절정으로 LEADS_INTO됩니다.
    PARALLEL - story 병렬로 또는 같은 시간대에 일어나는 일

AI 관계

  1. TRAINED_ON - 모델은 데이터셋에 TRAINED_ON됩니다.

  2. FINETUNED_FROM - 모델은 기본 모델에서 FINETUNED_FROM됩니다.

  3. GENERATED_FROM - 이미지는 미세 조정된 모델에서 GENERATED_FROM됩니다.

  4. REQUIRES_DATA - 모델은 훈련을 위해 데이터를 REQUIRES_DATA합니다.

  5. BASED_ON - 리믹스는 특정 워크플로우에 BASED_ON됩니다.

  6. INFLUENCES - 샘플 데이터는 모델 출력을 INFLUENCES합니다.

  7. CREATES - 파이프라인은 미세 조정된 모델을 CREATES합니다.

  8. UTILIZES - 워크플로우는 기본 모델을 UTILIZES합니다.

  9. DERIVED_FROM - 미세 조정된 모델은 기본 모델에서 DERIVED_FROM됩니다.

  10. PRODUCES - 모델은 생성된 이미지를 PRODUCES합니다.

  11. MODIFIES - 리믹스는 기본 워크플로우를 MODIFIES합니다.

  12. REFERENCES - AI 생성 이미지는 원본 데이터를 REFERENCES합니다.

  13. OPTIMIZED_BY - 모델은 특정 알고리즘에 의해 OPTIMIZED_BY됩니다.

  14. INHERITS - 미세 조정된 모델은 기본 모델의 특징을 INHERITS합니다.

  15. APPLIES_TO - 미세 조정 과정은 모델에 APPLIES_TO됩니다.

  16. COMBINES - 리믹스는 여러 데이터셋의 요소를 COMBINES합니다.

  17. GENERATES_VARIANTS - 모델은 이미지의 변형을 GENERATES_VARIANTS합니다.

  18. EXPANDS_ON - 미세 조정 과정은 기본 기능을 EXPANDS_ON합니다.

  19. CONFIGURES - 워크플로우는 모델의 매개변수를 CONFIGURES합니다.

  20. ADAPTS_TO - 미세 조정된 모델은 새로운 데이터에 ADAPTS_TO합니다.