Rentable NFTs [DRAFT]

NEP Title Author Discussions To Status Type Category Created SupersededBy
TBD Rentable NFTs Shot shot@banyan.gg Rentable NFTs [DRAFT] DRAFT Standards Track Contract 12/12/2022

Summary

This is a NEP Extension of NEP 171 proposing an additional role as a “user” which can be granted to multiple accounts with a time where the role is “expired” for each user granted. The user role represents permission to “use” the NFT, but not the ability to transfer it or set users.

Motivation

Some NFTs although have an owner, someone may be able to use the NFT for a select period of time, much like a landlord and someone renting a property to live in. There needs to be a NFT standard that specifies this behavior without transferring ownerships. Additionally this provides another source of revenue for NFTs

Use Cases: in game items, access to certain levels, temporary key card access, temporary invites

Inspiration

Inspired by EIP4907 EIPs/eip-4907.md at master · ethereum/EIPs · GitHub

Specification


fn set_user (

token_id: string

account_id: string

expiry_date: uint64

)
  • Sets the user address and when user expires
  • Expires set as UNIX timestamp
  • Should emit an error if not a valid token or expiry date (in the past)
  • Emits user_add event (see below)
  • The user will automatically lose role after the expiry_date
  • Emits user_add event is also emitted upon expiry
// user_add event

{

"standard": "nepXXX",

"event": "renter_is_added",

"data": {owner_id, user.id, expiry}

}
fn user_of {

token_id: string

}-> string
  • The following function gets the user address of an NFT
  • The zero address indicates that there is no user or the user is expired
  • tokenId The NFT to get the user address for
  • Return The user address for this NFT
fn user_expire {

token_id: string

}-> u64
  • Get the user expires of an NFT
  • The zero value indicates that there is no user
  • tokenId The NFT to get the user expires for
  • Returns The user expiration date for this NFT

Drawbacks

A setback is that in order for this to work those who want to enable this must implement this extension. However as it is not transferring ownership, merely specifying a new right it does not affect, listing/buying on other marketplaces.

There also needs to be a clear way of determining how many people can rent one NFT, and a way for indexers to show the current amount of people renting. Additionally just like different rental agreements there can be different rental agreements for the same NFT given market conditions and length. In this minimal specification it is assumed that there is only 1 user. Would love to an implementation for multiple

Also in this minimum specification it does not specify how listing should be done for facilitating the sale of a “rent”.

An additional drawback is that if someone is renting from one owner and the owner sells the NFT on an unsupported marketplace, the new owner may not be aware of all the rental agreements made of the current NFTs. There may be a pause on marketplace approvals or inability to rent. But at the same time, in the real world, a landlord can sell a house while tenants are living there. Maybe an eviction notice protocol should be considered.

Future possibilities

In the future there can be this idea of subletting where a user who was rented can also be specified whether they are allowed to sublet or sell its user status for the remainder of their expiry period.

Copyright

Copyright and related rights waived via CC0

1 Like