Features
Reading Inherited Royalties
Last updated August 6, 2026
Summary
Bubblegum V2 can store seller fees as an inherit sentinel (65535) on the leaf and resolve the effective rate from the MPL-Core collection's Royalties plugin. DAS puts collection-resolved values on the main fields (for display) and exposes leaf values on _raw fields (for hashing).
- Use main fields (
royalty.basis_points,creators) for royalty UI and payout display - Use
_rawfields (royalty.basis_points_raw,creators_raw) for proofs, hashing, and write instructions - Non-inherited assets are unchanged —
_raw/inheritedare omitted
This page is for any client that reads getAsset / DAS responses — wallets, marketplaces, indexers, analytics, and apps. For minting and updating inherited cNFTs, see Minting and Updating.
When it applies
A cNFT is using inherited royalties when:
- It is a Bubblegum V2 asset in an MPL-Core collection with the
Royaltiesplugin, and - The leaf seller fee is the inherit sentinel
65535(0xffff)
DAS signals this with royalty.inherited: true and royalty.basis_points_raw: 65535 when the collection royalty can be resolved onto the main fields.
Field map
| Use case | Fields |
|---|---|
| Display rate / royalty UI | royalty.basis_points, royalty.percent |
| Display payees / payout splits | creators |
| Hashing, merkle proofs, write instructions | royalty.basis_points_raw, creators_raw |
| Detect inherit mode | royalty.inherited (or basis_points_raw === 65535) |
Example DAS response (inherited)
"royalty": {
"royalty_model": "creators",
"target": null,
"percent": 0.075,
"basis_points": 750,
"basis_points_raw": 65535,
"inherited": true,
"primary_sale_happened": false,
"locked": false
},
"creators": [
{
"address": "CJkzXwVwqiaSvMuRb3obrZHdrPFjCMBJBDrjspn72tDv",
"share": 100,
"verified": true
}
],
"creators_raw": []
basis_points: 750is the collection rate to show users (7.5%).basis_points_raw: 65535is the on-chain sentinel used in the leaf data hash — not a 655.35% royalty.creatorsare collection Royalties plugin payees;creators_raw: []is the leaf creators array for hashing.
If the collection cannot be resolved, basis_points may fall back while basis_points_raw remains 65535.
Detection and display helpers
const INHERIT = 0xffff // 65535
function isInheritedRoyalty(royalty: {
basis_points: number
basis_points_raw?: number | null
inherited?: boolean | null
}): boolean {
return (
royalty.inherited === true ||
royalty.basis_points_raw === INHERIT
)
}
function leafBasisPoints(royalty: {
basis_points: number
basis_points_raw?: number | null
inherited?: boolean | null
}): number {
if (royalty.basis_points_raw != null) return royalty.basis_points_raw
if (royalty.inherited) return INHERIT
return royalty.basis_points
}
function leafCreators(asset: {
creators: Array<{ address: string; share: number; verified: boolean }>
creators_raw?: Array<{
address: string
share: number
verified: boolean
}> | null
}) {
return asset.creators_raw ?? asset.creators
}
With @metaplex-foundation/digital-asset-standard-api:
import {
SELLER_FEE_BASIS_POINTS_INHERIT,
isInheritedSfbpRoyalty,
getRawSellerFeeBasisPoints,
getResolvedSellerFeeBasisPoints,
} from '@metaplex-foundation/digital-asset-standard-api'
const royalty = asset.royalty
if (isInheritedSfbpRoyalty(royalty)) {
const rate = getResolvedSellerFeeBasisPoints(royalty) // e.g. 750 (display)
const leaf = getRawSellerFeeBasisPoints(royalty) // 65535
const payees = asset.creators // collection payees
const leafCreators = asset.creators_raw ?? []
}
What not to do
- Do not show
65535or6.5535%as the user-facing royalty rate — that value lives onbasis_points_raw. - Do not assume empty
creators_rawmeans no royalty recipients; display payees are oncreators. - Do not use main
basis_points/creatorswhen recomputing leaf hashes or building Bubblegum write instructions — usebasis_points_rawandcreators_raw.
Bubblegum SDK note
getAssetWithProof builds metadata from DAS leaf fields (basis_points_raw, creators_raw) so write instructions hash correctly. For UI rates after getAssetWithProof, read rpcAsset.royalty.basis_points and rpcAsset.creators. See the JavaScript SDK.
