이 섹션에서는 IP 자산에 라이선스 약관을 첨부하는 방법을 보여줍니다. 약관을 첨부함으로써 사용자는 해당 IP에서 그 약관으로 라이선스 토큰(온체인 “라이선스”)을 공개적으로 발행할 수 있습니다.라이선스 약관IP 자산에 첨부함으로써, 사용자들은 해당 IP로부터 이 약관을 가진 라이선스 토큰 (온체인 “라이선스”)을 공개적으로 발행할 수 있습니다.

전제 조건

튜토리얼을 시작하기 전에 완료해야 할 몇 가지 단계가 있습니다.

  1. 완료하세요 TypeScript SDK 설정

1. 시작하기 전에

IP 자산에 조건을 첨부하기 위해 기존 IP 자산이 필요하지 않다는 점을 언급해야 합니다. 다음 두 가지 함수를 사용하여 IP 등록 + 조건 생성 + 조건 첨부를 동일한 함수에서 수행할 수 있습니다:

2. 라이선스 조건 등록

IP 자산에 조건을 첨부하기 위해 먼저 조건을 생성해 봅시다!

라이선스 조건은 해당 조건을 가진 IP에서 발행된 라이선스에 대한 제한을 정의하는 구성 가능한 값의 집합입니다. 예를 들어, “이 라이선스를 발행하면 수익의 50%를 나와 공유해야 합니다.” 전체 조건 세트는 PIL 조건에서 확인할 수 있습니다.

생성하려는 동일한 매개변수 세트에 대해 이미 프로토콜에 라이선스 조건이 존재하는 경우, 다시 생성할 필요가 없으며 함수는 단순히 기존의 licenseTermsId와 정의되지 않은 txHash를 반환합니다. 라이선스 조건은 프로토콜 전체에 적용되므로 licenseTermsId를 사용하여 기존 라이선스 조건을 사용할 수 있습니다.

아래는 새로운 조건을 생성하는 방법을 보여주는 코드 예시입니다:

main.ts
import { LicenseTerms } from "@story-protocol/core-sdk";
import { zeroAddress } from "viem";
// you should already have a client set up (prerequisite)
import { client } from "./utils";

async function main() {
  const licenseTerms: LicenseTerms = {
    defaultMintingFee: 0n,
    // must be a whitelisted revenue token from https://docs.story.foundation/developers/deployed-smart-contracts
    // in this case, we use $WIP
    currency: "0x1514000000000000000000000000000000000000",
    // RoyaltyPolicyLAP address from https://docs.story.foundation/developers/deployed-smart-contracts
    royaltyPolicy: "0xBe54FB168b3c982b7AaE60dB6CF75Bd8447b390E",
    transferable: false,
    expiration: 0n,
    commercialUse: false,
    commercialAttribution: false,
    commercializerChecker: zeroAddress,
    commercializerCheckerData: "0x",
    commercialRevShare: 0,
    commercialRevCeiling: 0n,
    derivativesAllowed: false,
    derivativesAttribution: false,
    derivativesApproval: false,
    derivativesReciprocal: false,
    derivativeRevCeiling: 0n,
    uri: "",
  };

  const response = await client.license.registerPILTerms({
    ...licenseTerms,
    txOptions: { waitForTransaction: true },
  });

  console.log(
    `PIL Terms registered at transaction hash ${response.txHash}, License Terms ID: ${response.licenseTermsId}`
  );
}

main();

2a. PIL 플레이버

위에서 보듯이 많은 조건 중에서 선택해야 합니다.

새로운 조건을 등록하는 데 도움이 되는 편의 함수가 있습니다. PIL 플레이버를 만들었는데, 이는 사용할 조건을 결정하는 데 도움이 되는 미리 구성된 인기 있는 라이선스 조건 조합입니다. 다음 편의 함수를 사용하여 이러한 PIL 플레이버를 보고 조건을 등록할 수 있습니다:

3. 라이선스 조건 첨부

이제 조건을 생성하고 관련된 licenseTermsId를 가지고 있으므로, 다음과 같이 기존 IP 자산에 첨부할 수 있습니다:

main.ts
import { LicenseTerms } from "@story-protocol/core-sdk";
import { zeroAddress } from "viem";
// you should already have a client set up (prerequisite)
import { client } from "./utils";

async function main() {
  // previous code here ...

  const response = await client.license.attachLicenseTerms({
    // insert your newly created license terms id here
    licenseTermsId: LICENSE_TERMS_ID,
    // insert the ipId you want to attach terms to here
    ipId: "0x4c1f8c1035a8cE379dd4ed666758Fb29696CF721",
    txOptions: { waitForTransaction: true },
  });

  if (response.success) {
    console.log(
      `Attached License Terms to IPA at transaction hash ${response.txHash}.`
    );
  } else {
    console.log(`License Terms already attached to this IPA.`);
  }
}

main();

3a. 조건 생성 + 첨부

언급할 가치가 있는 것은 조건 생성 + 조건 첨부를 모두 동일한 단계에서 registerPilTermsAndAttach 함수를 사용하여 수행할 수 있다는 것입니다. 가장 편리한 방법을 선택하세요!

그리고 처음에 언급했듯이, 다음 두 가지 함수를 사용하여 IP 등록 + 조건 생성 + 조건 첨부를 동일한 함수에서 수행할 수 있습니다:

4. 라이선스 발행

이제 IP에 라이선스 조건을 첨부했으므로 다음 단계는 라이선스 토큰을 발행하는 것입니다. 이에 대해서는 다음 페이지에서 다루겠습니다.