RoyaltyPolicyLAP
The RoyaltyPolicyLAP (Liquid Absolute Percentage) contract defines the logic for splitting royalties for a given IP asset using a liquid absolute percentage mechanism. It manages the royalty relationships between IP assets and their ancestors, allowing for the transfer of revenue tokens to the appropriate royalty vaults.
State Variables
RoyaltyPolicyLAPStorage
Storage structure for the RoyaltyPolicyLAP containing:
royaltyStackLAP
: Sum of the royalty percentages to be paid to all ancestors for LAP royalty policyancestorPercentLAP
: The royalty percentage between an IP asset and a given ancestor for LAP royalty policytransferredTokenLAP
: Total lifetime revenue tokens transferred to a vault from a descendant IP via LAP
IP_GRAPH
The address of the IP Graph precompile contract that tracks relationships between IPs.
ROYALTY_MODULE
The address of the Royalty Module contract.
IP_GRAPH_ACL
The address of the IP Graph Access Control List contract.
Functions
constructor
Constructor for the RoyaltyPolicyLAP contract.
Parameters:
royaltyModule
: The RoyaltyModule addressipGraphAcl
: The IPGraphACL address
initialize
Initializer for this implementation contract.
Parameters:
accessManager
: The address of the protocol admin roles contract.
onLicenseMinting
Executes royalty related logic on minting a license.
Parameters:
ipId
: The ipId whose license is being minted (licensor)licensePercent
: The license percentage of the license being minted
onLinkToParents
Executes royalty related logic on linking to parents.
Parameters:
ipId
: The children ipId that is being linked to parentsparentIpIds
: The parent ipIds that the children ipId is being linked tolicenseRoyaltyPolicies
: The royalty policies of the licenseslicensesPercent
: The license percentage of the licenses being minted
Returns:
newRoyaltyStackLAP
: The royalty stack of the child ipId for LAP royalty policy
transferToVault
Transfers to vault an amount of revenue tokens claimable via LAP royalty policy.
Parameters:
ipId
: The ipId of the IP assetancestorIpId
: The ancestor ipId of the IP assettoken
: The token address to transfer
Returns:
- The amount of revenue tokens transferred
getPolicyRtsRequiredToLink
Returns the amount of royalty tokens required to link a child to a given IP asset.
Parameters:
ipId
: The ipId of the IP assetlicensePercent
: The percentage of the license
Returns:
- The amount of royalty tokens required to link a child to a given IP asset (always 0 for LAP)
getPolicyRoyaltyStack
Returns the LAP royalty stack for a given IP asset.
Parameters:
ipId
: The ipId to get the royalty stack for
Returns:
- Sum of the royalty percentages to be paid to all ancestors for LAP royalty policy
getPolicyRoyalty
Returns the royalty percentage between an IP asset and its ancestors via LAP.
Parameters:
ipId
: The ipId to get the royalty forancestorIpId
: The ancestor ipId to get the royalty for
Returns:
- The royalty percentage between an IP asset and its ancestors via LAP
getTransferredTokens
Returns the total lifetime revenue tokens transferred to a vault from a descendant IP via LAP.
Parameters:
ipId
: The ipId of the IP assetancestorIpId
: The ancestor ipId of the IP assettoken
: The token address to transfer
Returns:
- The total lifetime revenue tokens transferred to a vault from a descendant IP via LAP
isSupportGroup
Returns whether the royalty policy supports working with groups.
Returns:
- False (LAP royalty policy does not support working with groups)
Internal Functions
_getRoyaltyStackLAP
Returns the royalty stack for a given IP asset for LAP royalty policy.
Parameters:
ipId
: The ipId to get the royalty stack for
Returns:
- The royalty stack for a given IP asset for LAP royalty policy
_setRoyaltyLAP
Sets the LAP royalty for a given link between an IP asset and its ancestor.
Parameters:
ipId
: The ipId to set the royalty forparentIpId
: The parent ipId to set the royalty forroyalty
: The LAP license royalty percentage
_getRoyaltyLAP
Returns the royalty percentage between an IP asset and its ancestor via royalty policy LAP.
Parameters:
ipId
: The ipId to get the royalty forancestorIpId
: The ancestor ipId to get the royalty for
Returns:
- The royalty percentage between an IP asset and its ancestor via royalty policy LAP
_getRoyaltyPolicyLAPStorage
Returns the storage struct of RoyaltyPolicyLAP.
Returns:
- The storage structure for the RoyaltyPolicyLAP
_authorizeUpgrade
Hook to authorize the upgrade according to UUPSUpgradeable.
Parameters:
newImplementation
: The address of the new implementation
Events
RevenueTransferredToVault
Emitted when revenue tokens are transferred to a vault.
Parameters:
ipId
: The ipId of the IP assetancestorIpId
: The ancestor ipId of the IP assettoken
: The token address transferredamount
: The amount of tokens transferred
Security Considerations
The RoyaltyPolicyLAP contract implements several security measures:
-
Access Control: Functions like
onLicenseMinting
andonLinkToParents
can only be called by the Royalty Module through theonlyRoyaltyModule
modifier. -
Reentrancy Protection: The
nonReentrant
modifier is used on functions that handle token transfers to prevent reentrancy attacks. -
Pausability: The contract can be paused in emergency situations using the
whenNotPaused
modifier. -
Safe Token Transfers: The contract uses OpenZeppelin’s SafeERC20 library to ensure safe token transfers.
-
Upgradability: The contract is upgradable using the UUPS pattern, with upgrade authorization restricted to the protocol admin.
-
Input Validation: The contract validates inputs and checks for edge cases, such as preventing transfers between the same IP.