Native Transfer Fees for URITokens #720
Cbot-XRPL
started this conversation in
Feature Ideas/Discussions
Replies: 1 comment 7 replies
-
|
I have some concerns regarding TransferFeeRecipient.
|
Beta Was this translation helpful? Give feedback.
7 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Native Transfer Fees for URITokens
Author: Cbot Labs LLC
Status: Proposal
Category: Amendment
Created: 2026-03-15
Abstract
This proposal adds an optional immutable
TransferFeefield to URITokens on Xahau.The
TransferFeeis specified at mint time, stored on the URIToken ledger object, and automatically applied during qualifying native secondary sales. This proposal also adds an optionalTransferFeeRecipientfield, allowing the minter to direct transfer fees to a wallet other than the issuer account.The design intentionally borrows the bounded mint-time transfer-fee concept familiar from XLS-20 while preserving the lighter and separate architecture of URITokens.
This proposal does not attempt to make URITokens equivalent to XLS-20 NFTs, nor does it require Hooks-based royalty enforcement. Instead, it introduces a minimal native transfer-fee primitive for common creator and marketplace use cases.
Motivation
URITokens were designed as lightweight first-class non-fungible objects. That simplicity is valuable, but it also means creator fee behavior is not natively standardized.
A native transfer-fee mechanism would provide:
This would give creators and marketplaces a simple native option without requiring Hooks-based enforcement stacks for common use cases.
Rationale
URITokens and XLS-20 NFTs are different systems and should remain different systems.
This proposal borrows only the transfer-fee concept from XLS-20, not its full object model, offer system, ID packing, or related semantics.
The design is intentionally minimal:
This keeps URITokens simple while supporting a common creator and issuer requirement.
Specification
Amendment
This proposal introduces a new amendment to the Xahau protocol.
When enabled, the amendment adds:
TransferFeefield toURITokenMintTransferFeeRecipientfield toURITokenMintURITokenledger objectURITokenBuytransactionsNew Serialized Fields
Add the following optional serialized fields:
sfTransferFee,UInt16sfTransferFeeRecipient,AccountIDTransferFeeSemanticsTransferFeerepresents a fee rate in tenths of a basis point.This proposal adopts the same numeric convention commonly used for transfer-fee style fields:
0500000.001%1000=1.000%2500=2.500%10000=10.000%50000=50.000%If absent, the transfer fee is considered
0.Values above
50000MUST cause the mint transaction to fail.TransferFeeRecipientSemanticsTransferFeeRecipientidentifies the account that receives transfer-fee proceeds during qualifying royalty-bearing secondary sales.Rules:
TransferFeeRecipientis absent, the fee recipient defaults to theIssuer.TransferFeeRecipientis present, it MUST be a valid Xahau account address.TransferFeeRecipientMUST NOT be changed after minting.TransferFeeRecipientMAY be the issuer or a different wallet.This allows creators, DAOs, treasury wallets, or managed revenue wallets to receive secondary-sale fees without forcing the issuer account itself to collect them.
Modified Transaction:
URITokenMintAdd optional fields:
TransferFeeTransferFeeRecipientMint Rules
When a
URITokenMinttransaction includesTransferFee:0and50000inclusive.URITokenledger object.When a
URITokenMinttransaction includesTransferFeeRecipient:URITokenledger object.If
TransferFeeis absent, the token has no transfer-fee obligation.If
TransferFeeRecipientis absent, the recipient defaults to the issuer.If
TransferFeeis0, implementations MAY omitTransferFeeRecipientfrom the created ledger object.Modified Ledger Object:
URITokenAdd optional fields:
TransferFeeTransferFeeRecipientExample object:
{ "LedgerEntryType": "URIToken", "Flags": 0, "Issuer": "rIssuerExample...", "Owner": "rOwnerExample...", "URI": "697066733A2F2F62616679...", "TransferFee": 2500, "TransferFeeRecipient": "rRoyaltyWalletExample..." }Beta Was this translation helpful? Give feedback.
All reactions