IPAssetClient

메서드

  • register
  • registerDerivative
  • registerDerivativeWithLicenseTokens
  • mintAndRegisterIpAssetWithPilTerms
  • registerIpAndAttachPilTerms
  • registerDerivativeIp
  • mintAndRegisterIpAndMakeDerivative
  • mintAndRegisterIp
  • registerPilTermsAndAttach
  • mintAndRegisterIpAndMakeDerivativeWithLicenseTokens
  • registerIpAndMakeDerivativeWithLicenseTokens

IPAssetClient 탐색하기

📜 Licensing Module과 상호 작용하는 많은 함수가 있기 때문에📜 Licensing Module, 우리는 이를 유용한 차트로 분류하여 찾고 있는 것을 식별하고 관련 문서를 찾을 수 있도록 했습니다.

함수NFT 발행IPA 등록라이선스 조건 생성라이선스 조건 첨부라이선스 토큰 발행파생물로 등록
register
mintAndRegisterIp
registerIpAndAttachPilTerms
mintAndRegisterIpAssetWithPilTerms
registerDerivativeIp
mintAndRegisterIpAndMakeDerivativeWithLicenseTokens
registerIpAndMakeDerivativeWithLicenseTokens
mintAndRegisterIpAndMakeDerivative
registerDerivative
registerDerivativeWithLicenseTokens
registerPilTermsAndAttach
registerPILTerms
attachLicenseTerms
mintLicenseTokens
  • 빨간색: IPAssetClient (이 페이지)
  • 파란색: LicenseClient

register

NFT를 IP로 등록하고 해당하는 🧩 IP Asset을 생성합니다. 주어진 NFT가 이미 등록되어 있다면, 이 함수는 기존의 🧩 IP Asset을 반환합니다.🧩 IP Asset. 주어진 NFT가 이미 등록되어 있다면, 이 함수는 기존의 ipId.

이 함수는 또한 기본 NFT의 메타데이터를 metadata 아래에 전달된 내용으로 설정합니다.tokenUri 에서 전달된 내용으로 ipMetadata.nftMetadataURI.

메서드타입
register(request: RegisterRequest) => Promise<RegisterIpResponse>

Parameters:

  • request.nftContract: NFT의 주소.
  • request.tokenId: NFT의 토큰 식별자.
  • request.ipMetadata: [선택사항] 새로 발행된 NFT와 새로 등록된 IP에 대한 원하는 메타데이터.
    • request.ipMetadata.ipMetadataURI [선택사항] IP의 메타데이터 URI.
    • request.ipMetadata.ipMetadataHash [선택사항] IP의 메타데이터 해시.
    • request.ipMetadata.nftMetadataURI [선택사항] NFT의 메타데이터 URI.
    • request.ipMetadata.nftMetadataHash [선택사항] IP NFT의 메타데이터 해시.
  • request.deadline: [선택사항] 서명의 마감 시간(밀리초). 기본값은 1000입니다.기본값은 1000입니다.
  • request.txOptions: [선택사항] 트랜잭션 옵션.options.
import { toHex } from "viem";

const response = await client.ipAsset.register({
  nftContract: "0x041B4F29183317Fd352AE57e331154b73F8a1D73",
  tokenId: "12",
  ipMetadata: {
    ipMetadataURI: "test-uri",
    ipMetadataHash: toHex("test-metadata-hash", { size: 32 }),
    nftMetadataHash: toHex("test-nft-metadata-hash", { size: 32 }),
    nftMetadataURI: "test-nft-uri",
  },
  txOptions: { waitForTransaction: true },
});

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

batchRegister

NFT를 IP로 일괄 등록하여 해당하는 IP 기록을 생성합니다.

메서드타입
batchRegister(request: BatchRegisterRequest) => Promise<BatchRegisterResponse>

registerDerivative

라이선스 토큰 없이 부모 IP의 라이선스 조건으로 직접 파생물을 등록하고, 부모 IP의 라이선스 조건을 파생 IP에 첨부합니다.

이 함수를 호출하기 전에 라이선스 조건이 부모 IP에 첨부되어 있어야 합니다.

모든 IP는 기본적으로 기본 라이선스 조건이 첨부됩니다.

파생 IP 소유자는 호출자이거나 승인된 운영자여야 합니다.

메서드타입
registerDerivative(request: RegisterDerivativeRequest) => Promise<RegisterDerivativeResponse>

Parameters:

  • request.childIpId: 파생 IP ID.
  • request.licenseTermsIds: 이 파생 IP의 생성을 승인하는 라이선스 조건 ID 배열. 각 ID는 parentIpIds 배열의 부모 IP와 위치적으로 일치해야 하며, 일대일 매핑을 생성합니다. Story는 각 지정된 라이선스 조건이 해당 부모 IP에 대한 파생물 등록을 허용하는지 온체인에서 확인합니다. 배열의 길이가 일치하지 않거나 조건이 파생물 생성을 허용하지 않는 경우 트랜잭션이 실패합니다.parentIpIds 배열과 일대일 매핑을 생성합니다. Story는 각 지정된 라이선스 조건이 해당 부모 IP에 대한 파생물 등록을 허용하는지 온체인에서 확인합니다. 배열의 길이가 일치하지 않거나 조건이 파생물 생성을 허용하지 않는 경우 트랜잭션이 실패합니다.
  • request.parentIpIds: 이 파생물이 생성된 부모 IP ID의 배열. 각 부모 IP는 파생 관계를 승인하는 licenseTermsIds 배열의 동일한 인덱스에 해당하는 라이선스 조건을 지정해야 합니다.
  • request.licenseTemplate: [선택사항] 연결에 사용될 라이선스 템플릿의 주소. 현재는 PIL
  • request.maxMintingFee: [선택사항] 호출자가 지불할 의사가 있는 최대 발행 수수료. 0으로 설정하면 제한이 없습니다. Default: 0
  • request.maxRevenueShare: [선택사항] 자식이 파생물로 등록할 때 자식과 부모 사이에 동의된 최대 수익 공유 비율. 0에서 100 사이여야 합니다. Default: 100
  • request.maxRts: [선택사항] 외부 로열티 정책에 분배될 수 있는 최대 로열티 토큰 수. 0에서 100,000,000 사이여야 합니다. Default: 100_000_000
  • request.txOptions: [선택사항] 트랜잭션 options.
const response = await client.ipAsset.registerDerivative({
  childIpId: "0xC92EC2f4c86458AFee7DD9EB5d8c57920BfCD0Ba",
  parentIpIds: ["0xC92EC2f4c86458AFee7DD9EB5d8c57920BfCD0Ba"],
  licenseTermsIds: ["5"],
  txOptions: { waitForTransaction: true },
});

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

registerDerivativeWithLicenseTokens

라이선스 토큰으로 파생물을 등록합니다.

파생 IP는 부모 IP의 라이선스 조건에서 발행된 라이선스 토큰으로 등록됩니다.

라이선스 토큰으로 발행된 부모 IP의 라이선스 조건이 파생 IP에 첨부됩니다.

호출자는 파생 IP 소유자 또는 승인된 운영자여야 합니다.

메서드타입
registerDerivativeWithLicenseTokens(request: RegisterDerivativeWithLicenseTokensRequest) => Promise<RegisterDerivativeWithLicenseTokensResponse>

Parameters:

  • request.childIpId: 파생 IP ID.
  • request.licenseTokenIds: 라이선스 토큰의 ID.
  • request.maxRts: 외부 로열티 정책에 분배될 수 있는 최대 로열티 토큰 수. 0에서 100,000,000 사이여야 합니다. 단순화를 위해 권장: 100_000_000
  • request.txOptions: [선택사항] 트랜잭션 options.
const response = await client.ipAsset.registerDerivativeWithLicenseTokens({
  childIpId: "0xC92EC2f4c86458AFee7DD9EB5d8c57920BfCD0Ba",
  licenseTokenIds: ["5"], // array of license ids relevant to the creation of the derivative, minted from the parent IPA
  txOptions: { waitForTransaction: true },
});

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

mintAndRegisterIpAssetWithPilTerms

컬렉션에서 NFT를 발행하고, IP로 등록하고, IP에 메타데이터를 첨부하고, IP에 라이선스 조건을 첨부하는 모든 작업을 하나의 함수로 수행합니다.

이 함수는 또한 기본 NFT의 tokenUriipMetadata.nftMetadataURI 아래에 전달된 값으로 설정합니다.

메서드타입
mintAndRegisterIpAssetWithPilTerms(request: MintAndRegisterIpAssetWithPilTermsRequest) => Promise<MintAndRegisterIpAssetWithPilTermsResponse>

Parameters:

  • request.spgNftContract: NFT 컬렉션의 주소.
  • request.allowDuplicates: [선택사항] 동일한 NFT 메타데이터로 IP를 발행할 수 있도록 허용하려면 true로 설정하세요. Default: true
  • request.licenseTermsData[]: 첨부할 라이선스 조건의 배열. ⚠️ 빈 배열을 전달하면 이 함수는 실패합니다.
    • request.licenseTermsData.terms: LicenseTerms 타입을 참조하세요.
    • request.licenseTermsData.licensingConfig: [선택사항] LicensingConfig 타입을 참조하세요. 제공되지 않으면 여기에 표시된 기본값으로 설정됩니다.
  • request.ipMetadata: [선택사항] 새로 발행된 NFT와 새로 등록된 IP에 대한 원하는 메타데이터.
    • request.ipMetadata.ipMetadataURI: [선택사항] IP의 메타데이터 URI.
    • request.ipMetadata.ipMetadataHash: [선택사항] IP의 메타데이터 해시.
    • request.ipMetadata.nftMetadataURI: [선택사항] NFT의 메타데이터 URI.
    • request.ipMetadata.nftMetadataHash: [선택사항] IP NFT의 메타데이터 해시.
  • request.recipient: [선택사항] 발행된 NFT를 받을 수령인의 주소.
  • request.txOptions: [선택사항] 트랜잭션 options.
import { LicenseTerms } from "@story-protocol/core-sdk";
import { zeroAddress } from "viem";

const commercialRemixTerms: LicenseTerms = {
  transferable: true,
  royaltyPolicy: "0xBe54FB168b3c982b7AaE60dB6CF75Bd8447b390E", // RoyaltyPolicyLAP address from https://docs.story.foundation/docs/deployed-smart-contracts
  defaultMintingFee: 0n,
  expiration: 0n,
  commercialUse: true,
  commercialAttribution: true,
  commercializerChecker: zeroAddress,
  commercializerCheckerData: zeroAddress,
  commercialRevShare: 50, // can claim 50% of derivative revenue
  commercialRevCeiling: 0n,
  derivativesAllowed: true,
  derivativesAttribution: true,
  derivativesApproval: false,
  derivativesReciprocal: true,
  derivativeRevCeiling: 0n,
  currency: "0x1514000000000000000000000000000000000000", // $WIP address from https://docs.story.foundation/docs/deployed-smart-contracts
  uri: "",
};

const response = await client.ipAsset.mintAndRegisterIpAssetWithPilTerms({
  spgNftContract: "0xc32A8a0FF3beDDDa58393d022aF433e78739FAbc",
  licenseTermsData: [{ terms: commercialRemixTerms }],
  // https://docs.story.foundation/docs/ip-asset#adding-nft--ip-metadata-to-ip-asset
  ipMetadata: {
    ipMetadataURI: "test-uri",
    ipMetadataHash: toHex("test-metadata-hash", { size: 32 }),
    nftMetadataHash: toHex("test-nft-metadata-hash", { size: 32 }),
    nftMetadataURI: "test-nft-uri",
  },
  txOptions: { waitForTransaction: true },
});

console.log(`
  Token ID: ${response.tokenId}, 
  IPA ID: ${response.ipId}, 
  License Terms ID: ${response.licenseTermsId}
`);

batchMintAndRegisterIpAssetWithPilTerms

컬렉션에서 NFT를 일괄 발행하고 IP로 등록합니다.

메서드타입
batchMintAndRegisterIpAssetWithPilTerms(request: BatchMintAndRegisterIpAssetWithPilTermsRequest) => Promise<BatchMintAndRegisterIpAssetWithPilTermsResponse>

registerIpAndAttachPilTerms

주어진 NFT를 IP로 등록하고, IP에 메타데이터를 첨부하고, IP에 라이선스 조건을 첨부하는 모든 작업을 하나의 함수로 수행합니다.

이 함수는 또한 기본 NFT의 tokenUriipMetadata.nftMetadataURI 아래에 전달된 값으로 설정합니다.

메서드타입
registerIpAndAttachPilTerms(request: RegisterIpAndAttachPilTermsRequest) => Promise<RegisterIpAndAttachPilTermsResponse>

Parameters:

  • request.nftContract: NFT 컬렉션의 주소.
  • request.tokenId: NFT의 ID.
  • request.licenseTermsData[]: 첨부할 라이선스 조건의 배열. ⚠️ 빈 배열을 전달하면 이 함수는 실패합니다.
    • request.licenseTermsData.terms: LicenseTerms 타입을 참조하세요.
    • request.licenseTermsData.licensingConfig: [선택사항] LicensingConfig 타입을 참조하세요. 제공되지 않으면 여기에 표시된 기본값으로 설정됩니다.
  • request.ipMetadata: [선택사항] 새로 발행된 NFT와 새로 등록된 IP에 대한 원하는 메타데이터.
    • request.ipMetadata.ipMetadataURI: [선택사항] IP의 메타데이터 URI.
    • request.ipMetadata.ipMetadataHash: [선택사항] IP의 메타데이터 해시.
    • request.ipMetadata.nftMetadataURI: [선택사항] NFT의 메타데이터 URI.
    • request.ipMetadata.nftMetadataHash: [선택사항] IP NFT의 메타데이터 해시.
  • request.deadline: [선택사항] 서명의 마감 시간(밀리초). 기본값은 1000입니다.
  • request.txOptions: [선택사항] 트랜잭션 options.
import { LicenseTerms } from "@story-protocol/core-sdk";
import { toHex, zeroAddress } from "viem";

const commercialRemixTerms: LicenseTerms = {
  transferable: true,
  royaltyPolicy: "0xBe54FB168b3c982b7AaE60dB6CF75Bd8447b390E", // RoyaltyPolicyLAP address from https://docs.story.foundation/docs/deployed-smart-contracts
  defaultMintingFee: 0n,
  expiration: 0n,
  commercialUse: true,
  commercialAttribution: true,
  commercializerChecker: zeroAddress,
  commercializerCheckerData: zeroAddress,
  commercialRevShare: 50, // can claim 50% of derivative revenue
  commercialRevCeiling: 0n,
  derivativesAllowed: true,
  derivativesAttribution: true,
  derivativesApproval: false,
  derivativesReciprocal: true,
  derivativeRevCeiling: 0n,
  currency: "0x1514000000000000000000000000000000000000", // $WIP address from https://docs.story.foundation/docs/deployed-smart-contracts
  uri: "",
};

const response = await client.ipAsset.registerIpAndAttachPilTerms({
  nftContract: "0x041B4F29183317Fd352AE57e331154b73F8a1D73",
  tokenId: "12",
  licenseTermsData: [{ terms: commercialRemixTerms }],
  ipMetadata: {
    ipMetadataURI: "test-uri",
    ipMetadataHash: toHex("test-metadata-hash", { size: 32 }),
    nftMetadataHash: toHex("test-nft-metadata-hash", { size: 32 }),
    nftMetadataURI: "test-nft-uri",
  },
  txOptions: { waitForTransaction: true },
});
console.log(
  `Root IPA created at transaction hash ${response.txHash}, IPA ID: ${response.ipId}`
);

registerDerivativeIp

NFT를 IP로 등록한 다음 라이선스 토큰을 사용하지 않고 다른 IP 자산의 파생물로 연결합니다.

이 함수는 또한 기본 NFT의 tokenUriipMetadata.nftMetadataURI 아래에 전달된 값으로 설정합니다.

메서드타입
registerDerivativeIp(request: RegisterIpAndMakeDerivativeRequest) => Promise<RegisterIpAndMakeDerivativeResponse>

Parameters:

  • request.nftContract: NFT 컬렉션의 주소.
  • request.tokenId: NFT의 ID.
  • request.derivData: registerDerivative에 사용될 파생 데이터.
    • request.derivData.parentIpIds: 등록된 파생 IP를 연결할 부모 IP의 ID들.
    • request.derivData.licenseTermsIds: 연결에 사용될 라이선스 조건의 ID들.
    • request.derivData.maxMintingFee: [선택사항] 호출자가 지불할 의사가 있는 최대 발행 수수료. 0으로 설정하면 제한이 없습니다.Default: 0
    • request.derivData.maxRevenueShare: [선택사항] 자식이 파생물로 등록할 때 자식과 부모 사이에 동의한 최대 수익 공유 비율. 0에서 100 사이여야 합니다.Default: 100
    • request.derivData.maxRts: [선택사항] 외부 로열티 정책에 분배될 수 있는 최대 로열티 토큰 수. 0에서 100,000,000 사이여야 합니다.Default: 100_000_000
    • request.derivData.licenseTemplate: [선택사항] 연결에 사용될 라이선스 템플릿의 주소. 현재는 이것만 가능합니다 PIL
  • request.ipMetadata: [선택사항] 새로 발행된 NFT와 새로 등록된 IP에 대한 원하는 메타데이터.
    • request.ipMetadata.ipMetadataURI [선택사항] IP의 메타데이터 URI.
    • request.ipMetadata.ipMetadataHash [선택사항] IP의 메타데이터 해시.
    • request.ipMetadata.nftMetadataURI [선택사항] NFT의 메타데이터 URI.
    • request.ipMetadata.nftMetadataHash [선택사항] IP NFT의 메타데이터 해시.
  • request.deadline: [선택사항] 서명의 기한(밀리초). 기본값은 1000입니다.
  • request.txOptions: [선택사항] 트랜잭션 options.
import { toHex } from "viem";

const response = await client.ipAsset.registerDerivativeIp({
  nftContract: "0x041B4F29183317Fd352AE57e331154b73F8a1D73", // your NFT contract address
  tokenId: "127",
  derivData: {
    parentIpIds: ["0xd142822Dc1674154EaF4DDF38bbF7EF8f0D8ECe4"],
    licenseTermsIds: ["1"],
  },
  // https://docs.story.foundation/docs/ip-asset#adding-nft--ip-metadata-to-ip-asset
  ipMetadata: {
    ipMetadataURI: "test-uri",
    ipMetadataHash: toHex("test-metadata-hash", { size: 32 }),
    nftMetadataHash: toHex("test-nft-metadata-hash", { size: 32 }),
    nftMetadataURI: "test-nft-uri",
  },
  txOptions: { waitForTransaction: true },
});

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

batchRegisterDerivative

부모 IP의 라이선스 조건으로 파생물을 일괄 등록합니다.

메서드타입
batchRegisterDerivative(request: BatchRegisterDerivativeRequest) => Promise<BatchRegisterDerivativeResponse>

mintAndRegisterIpAndMakeDerivative

컬렉션에서 NFT를 발행하고 라이선스 토큰 없이 파생 IP로 등록합니다.

이 함수는 또한 기본 NFT의 tokenUri을 다음에 전달된 값으로 설정합니다 ipMetadata.nftMetadataURI.

메서드타입
mintAndRegisterIpAndMakeDerivative(request: MintAndRegisterIpAndMakeDerivativeRequest) => Promise<MintAndRegisterIpAndMakeDerivativeResponse>

Parameters:

  • request.spgNftContract: NFT 컬렉션의 주소.
  • request.allowDuplicates: [선택사항] 동일한 NFT 메타데이터로 IP를 발행할 수 있도록 허용하려면 true로 설정하세요.Default: true
  • request.derivData: registerDerivative에 사용될 파생 데이터.
    • request.derivData.parentIpIds: 등록된 파생 IP를 연결할 부모 IP의 ID들.
    • request.derivData.licenseTermsIds: 연결에 사용될 라이선스 조건의 ID들.
    • request.derivData.maxMintingFee: [선택사항] 호출자가 지불할 의사가 있는 최대 발행 수수료. 0으로 설정하면 제한이 없습니다.Default: 0
    • request.derivData.maxRevenueShare: [선택사항] 자식이 파생물로 등록할 때 자식과 부모 사이에 동의한 최대 수익 공유 비율. 0에서 100 사이여야 합니다.Default: 100
    • request.derivData.maxRts: [선택사항] 외부 로열티 정책에 분배될 수 있는 최대 로열티 토큰 수. 0에서 100,000,000 사이여야 합니다.Default: 100_000_000
    • request.derivData.licenseTemplate: [선택사항] 연결에 사용될 라이선스 템플릿의 주소. 현재는 이것만 가능합니다 PIL
  • request.ipMetadata: [선택사항] 새로 발행된 NFT와 새로 등록된 IP에 대한 원하는 메타데이터.
    • request.ipMetadata.ipMetadataURI [선택사항] IP의 메타데이터 URI.
    • request.ipMetadata.ipMetadataHash [선택사항] IP의 메타데이터 해시.
    • request.ipMetadata.nftMetadataURI [선택사항] NFT의 메타데이터 URI.
    • request.ipMetadata.nftMetadataHash [선택사항] IP NFT의 메타데이터 해시.
  • request.recipient: [선택사항] 발행된 NFT를 받을 수신자의 주소, 기본값은 귀하의 지갑 주소입니다.
  • request.txOptions: [선택사항] 트랜잭션 options.
import { toHex } from "viem";

const response = await client.ipAsset.mintAndRegisterIpAndMakeDerivative({
  // an NFT contract address created by the SPG
  spgNftContract: "0xc32A8a0FF3beDDDa58393d022aF433e78739FAbc",
  derivData: {
    parentIpIds: ["0xd142822Dc1674154EaF4DDF38bbF7EF8f0D8ECe4"],
    licenseTermsIds: ["1"],
  },
  // https://docs.story.foundation/docs/ip-asset#adding-nft--ip-metadata-to-ip-asset
  ipMetadata: {
    ipMetadataURI: "test-uri",
    ipMetadataHash: toHex("test-metadata-hash", { size: 32 }),
    nftMetadataHash: toHex("test-nft-metadata-hash", { size: 32 }),
    nftMetadataURI: "test-nft-uri",
  },
  txOptions: { waitForTransaction: true },
});

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

batchMintAndRegisterIpAndMakeDerivative

컬렉션에서 NFT를 일괄 발행하고 라이선스 토큰 없이 파생 IP로 등록합니다.

메서드타입
batchMintAndRegisterIpAndMakeDerivative(request: BatchMintAndRegisterIpAndMakeDerivativeRequest) => Promise<BatchMintAndRegisterIpAndMakeDerivativeResponse>

mintAndRegisterIp

SPGNFT 컬렉션에서 NFT를 발행하고 메타데이터와 함께 IP로 등록합니다.

이 함수는 또한 기본 NFT의 tokenUri을 다음에 전달된 값으로 설정합니다 ipMetadata.nftMetadataURI.

메서드타입
mintAndRegisterIp(request: MintAndRegisterIpRequest) => Promise<RegisterIpResponse>

Parameters:

  • request.spgNftContract: NFT 컬렉션의 주소.
  • request.allowDuplicates: [선택사항] 동일한 NFT 메타데이터로 IP를 발행할 수 있도록 허용하려면 true로 설정하세요.Default: true
  • request.recipient: [선택사항] 발행된 NFT를 받을 수신자의 주소, 기본값은 귀하의 지갑 주소입니다.
  • request.ipMetadata: [선택사항] 새로 발행된 NFT와 새로 등록된 IP에 대한 원하는 메타데이터.
    • request.ipMetadata.ipMetadataURI [선택사항] IP의 메타데이터 URI.
    • request.ipMetadata.ipMetadataHash [선택사항] IP의 메타데이터 해시.
    • request.ipMetadata.nftMetadataURI [선택사항] NFT의 메타데이터 URI.
    • request.ipMetadata.nftMetadataHash [선택사항] IP NFT의 메타데이터 해시.
  • request.txOptions: [선택사항] 트랜잭션 options.
import { toHex, Address, zeroAddress } from "viem";

const response = await client.ipAsset.mintAndRegisterIp({
  // an NFT contract address created by the SPG
  spgNftContract: "0xc32A8a0FF3beDDDa58393d022aF433e78739FAbc",
  // https://docs.story.foundation/docs/ip-asset#adding-nft--ip-metadata-to-ip-asset
  ipMetadata: {
    ipMetadataURI: "test-uri",
    ipMetadataHash: toHex("test-metadata-hash", { size: 32 }),
    nftMetadataHash: toHex("test-nft-metadata-hash", { size: 32 }),
    nftMetadataURI: "test-nft-uri",
  },
  txOptions: { waitForTransaction: true },
});

console.log(
  `Completed at transaction hash ${response.txHash}, NFT Token ID: ${response.tokenId}, IPA ID: ${response.ipId}, License Terms ID: ${response.licenseTermsId}`
);

registerPilTermsAndAttach

프로그래머블 IP 라이선스 조건을 등록(등록되지 않은 경우)하고 IP에 연결합니다.

메서드타입
registerPilTermsAndAttach(request: RegisterPilTermsAndAttachRequest) => Promise<RegisterPilTermsAndAttachResponse>

Parameters:

  • request.ipId: IP의 ID.
  • request.licenseTermsData[]: 연결될 라이선스 조건의 배열.
    • request.licenseTermsData.terms: 다음을 참조하세요 LicenseTerms 타입.
    • request.licenseTermsData.licensingConfig: [선택사항] 다음을 참조하세요 LicensingConfig 타입. 제공되지 않으면 여기에 표시된 것과 같은 기본값이 사용됩니다 here.
  • request.deadline: [선택 사항] 서명의 기한(밀리초 단위).기본값은 1000.
  • request.txOptions: [선택 사항] 트랜잭션 옵션.
import { LicenseTerms } from "@story-protocol/core-sdk";
import { zeroAddress } from "viem";

const commercialRemixTerms: LicenseTerms = {
  transferable: true,
  royaltyPolicy: "0xBe54FB168b3c982b7AaE60dB6CF75Bd8447b390E", // RoyaltyPolicyLAP address from https://docs.story.foundation/docs/deployed-smart-contracts
  defaultMintingFee: 0n,
  expiration: 0n,
  commercialUse: true,
  commercialAttribution: true,
  commercializerChecker: zeroAddress,
  commercializerCheckerData: zeroAddress,
  commercialRevShare: 50, // can claim 50% of derivative revenue
  commercialRevCeiling: 0n,
  derivativesAllowed: true,
  derivativesAttribution: true,
  derivativesApproval: false,
  derivativesReciprocal: true,
  derivativeRevCeiling: 0n,
  currency: "0x1514000000000000000000000000000000000000", // $WIP address from https://docs.story.foundation/docs/deployed-smart-contracts
  uri: "",
};

const response = await client.ipAsset.registerPilTermsAndAttach({
  ipId: "0x4c1f8c1035a8cE379dd4ed666758Fb29696CF721",
  licenseTermsData: [{ terms: commercialRemixTerms }],
  txOptions: { waitForTransaction: true },
});
console.log(`License Terms ${response.licenseTermsId} attached to IP Asset.`);

mintAndRegisterIpAndMakeDerivativeWithLicenseTokens

컬렉션에서 NFT를 발행하고 라이선스 토큰을 사용하여 파생 IP로 등록

이 함수는 또한 기본 NFT의 tokenUri을 다음에 전달된 값으로 설정합니다 ipMetadata.nftMetadataURI.

메서드타입
mintAndRegisterIpAndMakeDerivativeWithLicenseTokens(request: MintAndRegisterIpAndMakeDerivativeWithLicenseTokensRequest) => Promise<RegisterIpResponse>

Parameters:

  • request.spgNftContract: NFT 컬렉션의 주소.
  • request.allowDuplicates: [선택 사항] 동일한 NFT 메타데이터로 IP를 발행할 수 있도록 하려면 true로 설정하세요.Default: true
  • request.maxRts: 외부 로열티 정책에 분배될 수 있는 최대 로열티 토큰 수. 0에서 100,000,000 사이여야 합니다.단순화를 위해 권장: 100_000_000
  • request.licenseTokenIds: IP를 부모 IP에 연결하기 위해 소각될 라이선스 토큰의 ID.
  • request.ipMetadata: [선택 사항] 새로 발행된 NFT와 새로 등록된 IP에 대한 원하는 메타데이터.
    • request.ipMetadata.ipMetadataURI [선택 사항] IP의 메타데이터 URI.
    • request.ipMetadata.ipMetadataHash [선택 사항] IP의 메타데이터 해시.
    • request.ipMetadata.nftMetadataURI [선택 사항] NFT의 메타데이터 URI.
    • request.ipMetadata.nftMetadataHash [선택 사항] IP NFT의 메타데이터 해시.
  • request.recipient: [선택 사항] 발행된 NFT를 받을 주소, 기본값은 귀하의 지갑 주소입니다.
  • request.txOptions: [선택 사항] 트랜잭션 옵션.
import { toHex } from "viem";

const response =
  await client.ipAsset.mintAndRegisterIpAndMakeDerivativeWithLicenseTokens({
    spgNftContract: "0xc32A8a0FF3beDDDa58393d022aF433e78739FAbc", // your SPG NFT contract address
    licenseTokenIds: ["10"],
    // https://docs.story.foundation/docs/ip-asset#adding-nft--ip-metadata-to-ip-asset
    ipMetadata: {
      ipMetadataURI: "test-uri",
      ipMetadataHash: toHex("test-metadata-hash", { size: 32 }),
      nftMetadataHash: toHex("test-nft-metadata-hash", { size: 32 }),
      nftMetadataURI: "test-nft-uri",
    },
    maxRts: 100_000_000, // default
    txOptions: { waitForTransaction: true },
  });

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

registerIpAndMakeDerivativeWithLicenseTokens

주어진 NFT를 라이선스 토큰을 사용하여 파생 IP로 등록합니다.

이 함수는 또한 기본 NFT의 tokenUri을 다음에 전달된 값으로 설정합니다 ipMetadata.nftMetadataURI.

메서드타입
registerIpAndMakeDerivativeWithLicenseTokens(request: RegisterIpAndMakeDerivativeWithLicenseTokensRequest) => Promise<RegisterIpResponse>

Parameters:

  • request.nftContract: NFT 컬렉션의 주소.
  • request.tokenId: NFT의 ID.
  • request.maxRts: 외부 로열티 정책에 분배될 수 있는 최대 로열티 토큰 수. 0에서 100,000,000 사이여야 합니다.단순화를 위해 권장: 100_000_000
  • request.licenseTokenIds: IP를 부모 IP에 연결하기 위해 소각될 라이선스 토큰의 ID.
  • request.ipMetadata: [선택 사항] 새로 발행된 NFT와 새로 등록된 IP에 대한 원하는 메타데이터.
    • request.ipMetadata.ipMetadataURI [선택 사항] IP의 메타데이터 URI.
    • request.ipMetadata.ipMetadataHash [선택 사항] IP의 메타데이터 해시.
    • request.ipMetadata.nftMetadataURI [선택 사항] NFT의 메타데이터 URI.
    • request.ipMetadata.nftMetadataHash [선택 사항] IP NFT의 메타데이터 해시.
  • request.deadline: [선택 사항] 서명의 기한(밀리초 단위).기본값은 1000.
  • request.txOptions: [선택 사항] 트랜잭션 옵션.
import { toHex } from "viem";

const response =
  await client.ipAsset.registerIpAndMakeDerivativeWithLicenseTokens({
    nftContract: "0x041B4F29183317Fd352AE57e331154b73F8a1D73", // your NFT contract address
    tokenId: "127",
    licenseTokenIds: ["10"],
    // https://docs.story.foundation/docs/ip-asset#adding-nft--ip-metadata-to-ip-asset
    ipMetadata: {
      ipMetadataURI: "test-uri",
      ipMetadataHash: toHex("test-metadata-hash", { size: 32 }),
      nftMetadataHash: toHex("test-nft-metadata-hash", { size: 32 }),
      nftMetadataURI: "test-nft-uri",
    },
    txOptions: { waitForTransaction: true },
  });

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