Programmable IP License (PIL💊) for Devs and Creators

PIL is the first License Agreement for medial license developed by Story Protocol and inspired by Token Bound License. If you haven't already, read the overview: Programmable IP License (PIL💊)

It's implemented through the PILPolicyFrameworkManager and the PILPolicy

/// @notice Licensing parameters for the Programmable IP License v1 (PIL) standard
/// @param transferable Whether or not the license is transferable
/// @param attribution Whether or not attribution is required when reproducing the work
/// @param commercialUse Whether or not the work can be used commercially
/// @param commercialAttribution Whether or not attribution is required when reproducing the work commercially
/// @param commercializerChecker commericializers that are allowed to commercially exploit the work. If zero address,
/// then no restrictions is enforced.
/// @param commercialRevShare Percentage of revenue that must be shared with the licensor
/// @param derivativesAllowed Whether or not the licensee can create derivatives of his work
/// @param derivativesAttribution Whether or not attribution is required for derivatives of the work
/// @param derivativesApproval Whether or not the licensor must approve derivatives of the work before they can be
/// linked to the licensor IP ID
/// @param derivativesReciprocal Whether or not the licensee must license derivatives of the work under the same terms.
/// @param territories List of territories where the license is valid. If empty, global.
/// @param distributionChannels List of distribution channels where the license is valid. Empty if no restrictions.
/// @param royaltyPolicy Address of a royalty policy contract (e.g. RoyaltyPolicyLS) that will handle royalty payments
/// TODO: DO NOT deploy on production networks without hashing string[] instead of storing them
struct PILPolicy {
    bool attribution;
    bool commercialUse;
    bool commercialAttribution;
    address commercializerChecker;
    bytes commercializerCheckerData;
    uint32 commercialRevShare;
    bool derivativesAllowed;
    bool derivativesAttribution;
    bool derivativesApproval;
    bool derivativesReciprocal;
    string[] territories;
    string[] distributionChannels;
    string[] contentRestrictions;
}

/// @param transferable Whether or not the license is transferable
/// @param royaltyPolicy Address of a royalty policy contract (e.g. RoyaltyPolicyLS) that will handle royalty payments
/// @param mintingFee Fee to be paid when minting a license
/// @param mintingFeeToken Token to be used to pay the minting fee
/// @param policy PILPolicy compliant licensing term values
struct RegisterPILPolicyParams {
    bool transferable;
    address royaltyPolicy;
    uint256 mintingFee;
    address mintingFeeToken;
    PILPolicy policy;
}

Parameters implemented (on chain)

ParameterWhen is verifiedCan be enabled ifValuesDescription
Commercial use--True/FalseIf true, the derivative can be exploited commercially. If not, only non commercial use is allowed.
Commercial Allowed But Only for Certain CommercializersLNFT mint.
Derivative IPA Link
Commercial use = trueaddress for Hook contract,
encoded bytes that will be the input
Only certain addresses may mint licenses and link to parent. A smart contract that implements the particular rules must be provided (whitelist, token gating...)
Commercial Allowed With AttributionDisputerCommercial use = trueTrue/FalseIf true, the commercial use must refer to the original IPA (credits, YouTube description link, watermark...)
Commercial Allowed With Revenue ShareLNFT mint Deriv IPA linkCommercial use = trueuint, up to 100 with 1 decimal (1000 = 100.0%)Min % of revenue expected from derivative IPA
License Fee (One Time License Fee)LNFT mintCommercial use = truemintFee (uint amount) and mintFeeToken (WETH, USDC or USDT address supported)Sets the up front cost of minting the LNFT, paid by the address executing the method.
Derivatives AllowedLNFTmint-True/FalseIf true, holder can make one derivative IPA by linking to its parent. False, the license is not for making derivatives
Derivatives Allowed With AttributionDisputerDerivatives = trueTrue/FalseIf true, the derivatives must refer to the original IPA (credits, YouTube description link, watermark...)
Derivatives With ApprovalDeriv IPA linkDerivatives = trueTrue/FalseIf true, the licensor must signal they approve the content of the registered IPA
Derivatives Allowed With Reciprocal LicenseLNFT Mint Deriv IPA linkDerivatives = trueTrue/FalseDerivatives of this derivative can be created indefinitely, as long as they have the exact same terms.
TransferrableLNFT TransferTrue/FalseTrue for the LNFTs to be transferrable, false to only allow transfers from the licensor address.
TerritoryDisputerArray of stringsEmpty for global, or enter the allowed territories.
Channels of distributionDisputerArray of strings:
Merchandise
Video games
TV
Movies
Print
Other
Empty for no restrictions, or enter the allowed channels.
AttributionDisputerTrue/FalseReproductions of this IPA must attribute the source (credits, links, descriptions...)
Content standardsDisputerArray of strings:
No-Hate,
Suitable-For-All-Ages,
No-Drugs-Or-Weapons,
No-Pornography
Empty for no restrictions, or input the ones you want.

Parameters not yet implemented (not on chain, but still on the legal text)

  • Revenue ceiling.
  • Gross Revenues (as a field itself, it is part of the royalty module config)
  • License Fee (Monthly Payment)
  • Irrevocable (all licenses can be revoked by the Disputer module)
  • Monthly License Fee.
  • Alternative Dispute Resolution.
  • Expiration
  • Sublicensable
  • Currency (as a standalone parameter, it must be set as part of the minting fee config)
  • Limitations on Creation of Derivatives.
  • AI Learning Models
  • Restriction of Cross-Platform-Use
  • Governing Law
  • Additional License Parameters

Compatibility matrix for parameters

ParameterMulti parent evalReason
AttributionIndifferentHolder of all licenses must attribute the ones demanding it. Disputable
TransferableIndifferentProperty of the license, not the IP
Commercial useEqual or revertOne would infringe the other
Commercial attributionIndifferentHolder of all licenses must attribute the ones demanding it. Disputable
CommercializersIndifferentOK if verification checks for all licenses succeed
Commercial Rev ShareIndifferentLicensing process must set all. Verifications must pass
DerivativesEqual or revertOne would infringe the other
Derivatives AttributionIndifferentHolder of all licenses must attribute the ones demanding it. Disputable
Derivatives ApprovalIndifferentOK if verification checks for all licenses succeed
Derivatives ReciprocalEqual or revert. If both true, policy must be equalOne would infringe the other
Derivatives Rev ShareIndifferentLicensing process must set all. Verifications must pass
TerritoriesAll equal, or some empty and the rest equalAll permissive is OK. Some permissive except some with same restrictions OK. Different restrictions is a conflict
Distribution ChannelsSame as previousSame as previous
Content RestrictionsSame as previousSame as previous