Transferable NFT design enables subscription sharing and secondary market revenue dilution
Access NFTs are fully transferable per standard ERC-721 behavior, allowing subscribers to share or resell access without payment flowing back to the vault owner, diluting creator revenue.
Description
The access NFTs are fully transferable following standard ERC-721 behavior, which enables subscription sharing and creates an uncontrolled secondary market that dilutes creator revenue. Once a user purchases access to a vault, they can freely transfer their NFT to others without any payment flowing back to the vault owner.
The system treats NFT ownership as the sole determinant of access rights, regardless of who originally paid for the subscription:
function hasAccess(address vaultOwner,string calldata vaultId,address consumer) public view returns (bool response, string memory message, int32 expires) {// Only checks if consumer owns a valid NFT, not who paid for itfor (uint256 i = 0; i < balanceOf(consumer); i++) {uint256 tokenId = tokenOfOwnerByIndex(consumer, i);// ... access granted based on ownership alone}}
This creates a fundamental disconnect between payment and consumption, where vault owners receive one-time payments but potentially serve multiple users through NFT transfers.
Vulnerable Scenario:
The following steps help understand the issue:
- Alice purchases a $100 NFT subscription for 30 days of vault access.
- Vault owner receives $100 payment and Alice gets the NFT.
- Alice consumes content for 10 days, then transfers the NFT to Bob for $50 (external transaction).
- Bob gains 20 days of access without any payment to the vault owner.
- Bob can further transfer to Charlie, and so on.
- Vault owner serves multiple users but only received one payment.
Impact
Revenue dilution for content creators, uncontrolled subscription sharing, and potential secondary market price competition that undermines the original pricing strategy.
Recommendation
Consider implementing one of the following approaches based on business requirements:
Option 1: Non-transferable NFTs (Soulbound), Override _update to revert on transfers between non-zero addresses.
Option 2: Transfer Restrictions with Grace Period, Track mintTimestamp[tokenId] and revert transfers within a LOCK_PERIOD window.
Resolution
Ipal Network: Confirmed. We have addressed this by implementing a one-day transfer lock on all newly minted access NFTs.
Zealynx: Partially fixed. The NFTs remain fully transferable with no restrictions implemented. Users can still share subscriptions and create secondary markets, undermining the intended one-payment-per-user model and diluting creator revenue.

