According to the README.md
> If royalty information was not defined when the NFT was originally deployed, it may be added using the Royalty Registry which will be respected by our market contract.
The actual exchange code only respects the Royalty Registry or other royalty information if the number of recipients is less than or equal to four.
If the creatorRecipients.length is more than four then the array is essentially truncated and the royalties are only split among the first four entries in the array. If the array happens to be sorted from low to high then the people who were supposed to get the largest portions of the royalties are given nothing.
uint256 maxCreatorIndex = creatorRecipients.length - 1;
if (maxCreatorIndex > MAX_ROYALTY_RECIPIENTS_INDEX) {
maxCreatorIndex = MAX_ROYALTY_RECIPIENTS_INDEX;
}
// Send payouts to each additional recipient if more than 1 was defined
uint256 totalDistributed;
for (uint256 i = 1; i <= maxCreatorIndex; ++i) {
uint256 share = (creatorFee * creatorShares[i]) / totalShares;
totalDistributed += share;
_sendValueWithFallbackWithdraw(creatorRecipients[i], share, SEND_VALUE_GAS_LIMIT_MULTIPLE_RECIPIENTS);
}
Creators shouldn’t have to settle the correct amounts amongst themselves afterwards and doing so may trigger unwanted tax consequences for the creators who got the larger shares of funds.
Code inspection
Fetch the royalty information during offer creation, cache it for the final transfer, and reject any NFT for which the array size is more than MAX_ROYALTY_RECIPIENTS_INDEX
The text was updated successfully, but these errors were encountered:
All reactions