메인 콘텐츠로 건너뛰기

IPAssetClient

메서드

  • registerIpAsset
  • registerDerivativeIpAsset
  • linkDerivative

registerIpAsset

IP를 🧩 IP Asset으로 등록합니다. 다음 워크플로우를 지원합니다:
  1. IP Asset 등록 1a. 기존 NFT를 IP Asset으로 등록 1b. 새 NFT를 민팅하고 IP Asset으로 등록
  2. IP Asset에 라이선스 조건 첨부
  3. 로열티 토큰 배포
이 함수는 또한 기본 NFT의 tokenUriipMetadata.nftMetadataURI에 전달된 값으로 설정합니다.
MethodType
registerIpAsset(request: RegisterIpAssetRequest) => Promise<RegisterIpAssetResponse>
매개변수:
  • request.nft: 두 가지 옵션이 있습니다
    • { type: "minted", nftContract: Address, tokenId: number | bigint }: 기존 NFT를 IP Asset으로 등록합니다. 이미 NFT가 민팅되어 있어야 하므로, 일반적으로 더 어려운 옵션입니다.
    • { type: "mint", spgNftContract: Address, recipient?: Address, allowDuplicates?: boolean }: 새 NFT를 민팅하고 IP Asset으로 등록합니다. 일반적으로 더 쉬운 옵션인데, 이미 민팅된 NFT를 걱정할 필요가 없기 때문입니다. spgNftContract를 만들거나 기본값을 사용하여 민팅을 대신합니다.
  • request.licenseTermsData: 라이선스 조건을 첨부하려는 경우.
    • request.licenseTermsData.terms: IP Asset에 첨부할 license terms.
    • request.licenseTermsData.licensingConfig: IP Asset에 첨부할 licensing config.
    • request.licenseTermsData.maxLicenseTokens: 이 라이선스 조건에서 민팅할 수 있는 라이선스 토큰의 최대 수.
  • request.royaltyShares: 로열티 토큰을 배포하려는 경우.
    • request.royaltyShares.recipient: 로열티 지분 수신자의 주소.
    • request.royaltyShares.percentage: 로열티 지분의 백분율.
  • request.ipMetadata: IP Asset의 메타데이터
    • request.ipMetadata.ipMetadataURI: IP의 메타데이터 URI.
    • request.ipMetadata.ipMetadataHash: IP의 메타데이터 해시.
    • request.ipMetadata.nftMetadataURI: NFT의 메타데이터 URI.
    • request.ipMetadata.nftMetadataHash: IP NFT의 메타데이터 해시.
  • request.deadline: 서명의 마감 시간 (밀리초). 기본값은 1000.
import { PILFlavor, WIP_TOKEN_ADDRESS } from "@story-protocol/core-sdk";
import { toHex } from "viem";

// an example of an SPG NFT contract address
// you can create one via `client.nftClient.createNFTCollection`
const spgNftContract = "0xc32A8a0FF3beDDDa58393d022aF433e78739FAbc";

const response = await client.ipAsset.registerIpAsset({
  nft: { type: "mint", spgNftContract: spgNftContract },
  licenseTermsData: [
    {
      terms: PILFlavor.creativeCommonsAttribution({
        currency: WIP_TOKEN_ADDRESS,
        // RoyaltyPolicyLAP address from https://docs.datafdn.org/docs/deployed-smart-contracts
        royaltyPolicy: "0xBe54FB168b3c982b7AaE60dB6CF75Bd8447b390E",
      }),
    },
    {
      terms: PILFlavor.commercialRemix({
        defaultMintingFee: 10000n,
        commercialRevShare: 20, // 20%
        currency: WIP_TOKEN_ADDRESS,
        // RoyaltyPolicyLAP address from https://docs.datafdn.org/docs/deployed-smart-contracts
        royaltyPolicy: "0xBe54FB168b3c982b7AaE60dB6CF75Bd8447b390E",
      }),
      maxLicenseTokens: 100,
    },
  ],
  royaltyShares: [
    {
      recipient: "0x123...",
      percentage: 10,
    },
  ],
  ipMetadata: {
    ipMetadataURI:
      "https://ipfs.io/ipfs/bafkreiardkgvkejqnnkdqp4pamkx2e5bs4lzus5trrw3hgmoa7dlbb6foe",
    ipMetadataHash: toHex("test-metadata-hash", { size: 32 }),
    nftMetadataURI:
      "https://ipfs.io/ipfs/bafkreicexrvs2fqvwblmgl3gnwiwh76pfycvfs66ck7w4s5omluyhti2kq",
    nftMetadataHash: toHex("test-nft-metadata-hash", { size: 32 }),
  },
});

console.log(
  `Root IPA created at transaction hash ${response.txHash}, IPA ID: ${response.ipId}`
);

registerDerivativeIpAsset

IP를 다른 IP Asset의 파생물로 등록합니다. 이 함수를 사용하면 기존 라이선스 토큰을 사용하여 파생물로 등록하거나, 직접 라이선스 토큰을 민팅할 수 있습니다. IP를 파생물로 등록하려면, 그 자체가 IP Asset이어야 합니다. 따라서 이 함수를 사용하면 기존 NFT를 IP Asset(파생물이 될 것)으로 등록하거나, 새 NFT를 민팅(그리고 이를 파생물로 등록)할 수 있습니다.
MethodType
registerDerivativeIpAsset(request: RegisterDerivativeIpRequest) => Promise<RegisterDerivativeIpResponse>
매개변수:
  • request.nft: 두 가지 옵션이 있습니다
    • { type: "minted", nftContract: Address, tokenId: number | bigint }: 기존 NFT를 IP Asset으로 등록합니다. 이미 NFT가 민팅되어 있어야 하므로, 일반적으로 더 어려운 옵션입니다.
    • { type: "mint", spgNftContract: Address, recipient?: Address, allowDuplicates?: boolean }: 새 NFT를 민팅하고 IP Asset으로 등록합니다. 일반적으로 더 쉬운 옵션인데, 이미 민팅된 NFT를 걱정할 필요가 없기 때문입니다. spgNftContract를 만들거나 기본값을 사용하여 민팅을 대신합니다.
  • request.licenseTokenIds: 라이선스 토큰을 사용하여 파생물로 등록하려는 경우.
  • request.derivData: 라이선스 토큰을 직접 민팅하려는 경우.
    • request.derivData.parentIpIds: 등록된 파생 IP에 연결할 부모 IP의 ID.
    • request.derivData.licenseTermsIds: 연결에 사용할 라이선스 조건의 ID.
  • request.royaltyShares: 로열티 토큰을 배포하려는 경우.
    • request.royaltyShares.recipient: 로열티 지분 수신자의 주소.
    • request.royaltyShares.percentage: 로열티 지분의 백분율.
  • request.maxRts: 외부 로열티 정책에 배포될 수 있는 최대 로열티 토큰 수. 0과 100,000,000 사이여야 합니다. 단순성을 위해 권장: 100_000_000
  • request.ipMetadata: IP Asset의 메타데이터
    • request.ipMetadata.ipMetadataURI: IP의 메타데이터 URI.
    • request.ipMetadata.ipMetadataHash: IP의 메타데이터 해시.
    • request.ipMetadata.nftMetadataURI: NFT의 메타데이터 URI.
    • request.ipMetadata.nftMetadataHash: IP NFT의 메타데이터 해시.
  • request.deadline: 서명의 마감 시간 (밀리초). 기본값은 1000.
import { toHex } from "viem";

// an example of an SPG NFT contract address
// you can create one via `client.nftClient.createNFTCollection`
const spgNftContract = "0xc32A8a0FF3beDDDa58393d022aF433e78739FAbc";

// an example of a parent IP ID
const parentIpId = "0x456...";

// an example of a commercial remix license terms ID
const commercialRemixLicenseTermsId = 5;

const response = await client.ipAsset.registerDerivativeIpAsset({
  nft: { type: "mint", spgNftContract },
  derivData: {
    parentIpIds: [parentIpId],
    licenseTermsIds: [commercialRemixLicenseTermsId],
  },
  ipMetadata: {
    ipMetadataURI:
      "https://ipfs.io/ipfs/bafkreiardkgvkejqnnkdqp4pamkx2e5bs4lzus5trrw3hgmoa7dlbb6foe",
    ipMetadataHash: toHex("test-metadata-hash", { size: 32 }),
    nftMetadataURI:
      "https://ipfs.io/ipfs/bafkreicexrvs2fqvwblmgl3gnwiwh76pfycvfs66ck7w4s5omluyhti2kq",
    nftMetadataHash: toHex("test-nft-metadata-hash", { size: 32 }),
  },
  royaltyShares: [
    {
      recipient: "0x123...",
      percentage: 10,
    },
  ],
});

console.log(
  `Derivative IPA linked to parent at transaction hash ${response.txHash}`
);

linkDerivative

기존 파생 IP를 부모 IP에 연결합니다.
MethodType
linkDerivative(request: LinkDerivativeRequest) => Promise<LinkDerivativeResponse>
매개변수:
  • request.childIpId: 자식 IP의 ID.
  • request.licenseTermIds: 연결에 사용할 라이선스 조건의 ID.
  • request.parentIpIds: 부모 IP의 ID.
const response = await client.ipAsset.linkDerivative({
  childIpId: "0xC92EC2f4c86458AFee7DD9EB5d8c57920BfCD0Ba",
  parentIpIds: ["0xC92EC2f4c86458AFee7DD9EB5d8c57920BfCD0Ba"],
  licenseTermsIds: [5],
});

console.log(
  `Derivative IPA linked to parent at transaction hash ${response.txHash}`
);