π€ Rental
Simple Summaryβ
NFTs represent proof of ownership on the blockchain. Renting is a powerful tool for the NFT owners to make more out of their NFTs. An NFT rental agreement is an on chain rental contract, between the owner of an NFT and a renter (usually called rentee) who will have a temporary access to the NFT properties, against a rent fee (an amount or an NFT).
Abstractβ
Rental Contract are a way to spread the use of an NFT and earning money without loosing its ownership. An NFT owner can set his NFT as a rental contract and start renting it to anyone. Rental contract are mostly customizable to cover most common rental usecases.
Motivationβ
Rental contracts have so many usecases in the real world that could be adapted to the NFTs. While the main purpose of renting an NFT is to easily empower any projects to get the best utility of an NFT by spreading its features to everyone, it is also a great way to cover many real world sucessful usecases. And if rental NFT are already popular in the gaming industry, the tractions it gains in many other filed is truely relevant to our web 3 ecosystem (events-tickets, music, sport, subscription...).
π What is NFT Lending?β
NFT lending is very similar to the cryptocurrency industryβs P2P loans. However, unlike P2P lending, where individuals lend each other credit in a decentralized setup, NFT lending often functions via a middle man, the NFT lending platform.
NFT lending is, therefore, the opportunity to access loans with NFTβs as collateral. In other words, it is the practice of putting your NFT up as collateral for loans. NFT crypto lending is accessing crypto loans against NFT collateral.
Through NFT loans, lenders can access passive income from loan interest payments. On the other hand, borrowers can enjoy more liquidity on their holdings until they are ready to sell their CryptoPunks or BAYCs.
How Does NFT Lending Work?β
The NFT lending process involves three parties; the lender, the borrower, and the lending platform.
- The lender is the party that lends its crypto assets in exchange for interest.
- The borrower borrows a loan from a lender against an NFT.
- The lending platform is the middle man. The platform also holds NFT collateral until the loan is repaid in escrow.
Descriptionβ
NFT lending is the process of lending and/or borrowing money by using NFTs (Non-fungible token) as a collateral of the loans made. This process is managed by lending platforms, that we will discuss today in this article about the Best NFT Lending Platforms.
The NFT lending process is part of the larger topic of Crypto Lending, that uses the same principle but with βstandardβ cryptos as a collateral.
This is the usual process during an NFT lending situation:
- Borrowers use their NFTs as a collateral of their loan request, that will be locked (in the platform smart contract) once the loan money is issued -Lenders, on their side, can accept to loan the money to the borrower in exchange of interests (usually paid in crypto such as ETH).
- Once the borrower repays the loan and the interests to the lender, he receives back his NFT _ If the borrower doesnβt pay back his loan, the NFT is given to the lender
The Best NFT Lending Platformsβ
Rank | Name | Country | Collection | Currency | Lend | Borrow | Rates | LVT |
---|---|---|---|---|---|---|---|---|
1 | NFTFI | South Africa | CryptoPunks, Bored Ape, Mutant Ape, Art Blocks, Autoglyphs, ... | ETH, DAI | Yes | Yes | 20-80% | up to 50% |
2 | Arcade | US | ? | wETH, USDC, DAI | Yes | Yes | 5-60% | ? |
3 | NEXO | UK | CryptoPunks, Bored Ape | ETH, stablecoins | - | Yes | 12-15% | 10-20% |
4 | Drops | Undefined | ? | - | Yes | Yes | ? | up to 80% |
β¨ Specificationβ
Lifecycle statesβ
Rental NFTs will have the following lifecycle associated with them:
Contract Created -> Contract Rented -> Contract Updated * -> Contract Ended/Revoked.
Optionnal in the Rental NFTs lifecycle.
External interfacesβ
Rental NFT should support the following onchain interfaces:
interface {
/// Interface Id: TIP400-01
/// Description: The Caller creates a renting contract out of his NFT.
/// Constraint(s): Refer to section 'Rules'
/// Result(s): Refer to section 'Results'
create_contract(nft_id: NFTId, duration: Duration, acceptance_type: AcceptanceType, renter_can_revoke: bool, rent_fee: RentFee, renter_cancellation_fee: Option<CancellationFee>, rentee_cancellation_fee: Option<CancellationFee>);
/// Interface Id: TIP400-02
/// Description: The Caller revokes a running contract.
/// Constraint(s): Refer to section 'Rules'
/// Result(s): Refer to section 'Results'
revoke_contract(nft_id: NFTId);
/// Interface Id: TIP400-03
/// Description: The Caller cancel a non-running contract.
/// Constraint(s): Refer to section 'Rules'
/// Result(s): Refer to section 'Results'
cancel_contract(nft_id: NFTId);
/// Interface Id: TIP400-04
/// Description: The Caller accepts a existing non-running contract.
/// Constraint(s): Refer to section 'Rules'
/// Result(s): Refer to section 'Results'
rent(nft_id: NFTId);
/// Interface Id: TIP400-05
/// Description: The Caller creates a offer for an existing non-running contract.
/// Constraint(s): Refer to section 'Rules'
/// Result(s): Refer to section 'Results'
make_rent_offer(nft_id: NFTId);
/// Interface Id: TIP400-06
/// Description: The Caller accepts a offer for an existing non-running contract.
/// Constraint(s): Refer to section 'Rules'
/// Result(s): Refer to section 'Results'
accept_rent_offer(nft_id: NFTId);
/// Interface Id: TIP400-07
/// Description: The Caller removes his offer.
/// Constraint(s): Refer to section 'Rules'
/// Result(s): Refer to section 'Results'
retract_rent_offer(nft_id: NFTId)
/// Interface Id: TIP400-08
/// Description: The Caller changes the subscription terms.
/// Constraint(s): Refer to section 'Rules'
/// Result(s): Refer to section 'Results'
change_subscription_terms(nft_id: NFTId, period: BlockNumber, max_duration: Option<BlockNumber>, rent_fee: Balance, changeable: bool)
/// Interface Id: TIP400-09
/// Description: The Caller accepts the changed subscription terms.
/// Constraint(s): Refer to section 'Rules'
/// Result(s): Refer to section 'Results'
accept_subscription_terms(nft_id: NFTId)
}
Rules and constraintsβ
Create Contract Interface
Revoke Contract Interface
Cancel Contract Interface
Rent Interface
Make Rent Offer Interface
Accept Rent Offer Interface
Retract Rent Offer Interface
Change Subscription Terms Interface
Accept Subscription Terms Interface
Duration, Rent Fee and Cancellation Feeβ
- Duration of type Subscription MUST NOT use a NFT Rent Fee.
- Only Duration of type Fixed MAY use the Flexible Token Cancellation Fee
Resultsβ
Create Contract Interfaceβ
- Provided NFT MUST be in state
Rented
. - Provided Renter Cancellation NFT Fee MUST change its ownership to escrow account.
- Provided Renter Cancellation Token Fee MUST be taken from the Caller and send to a escrow account.
Revoke Contract Interfaceβ
- Provided NFT MUST NOT be anymore in state
Rented
. - The existing contract MUST be burned.
- Provided Caller Cancellation Fee MUST be given to the the damaged party.
- Provided Damaged Party Cancellation Fee MUST be returned to the damaged party.
Cancel Contract Interfaceβ
- Provided NFT MUST NOT be anymore in state
Rented
. - The existing contract MUST be burned.
- Provided Cancellation Fee MUST be given back to the Caller.
Rent Interfaceβ
- The existing contract MUST contain the Caller's address as Rentee.
- The existing contract MUST contain the start block.
- Provided Rent NFT Fee MUST change its ownership to the contract owner address.
- Provided Rent NFT Token Fee MUST be taken from Caller and send to contract owner address.
- Provided Renter Cancellation NFT Fee MUST change its ownership to escrow account.
- Provided Renter Cancellation Token Fee MUST be taken from the Caller and send to a escrow account.
Make Rent Offer Interfaceβ
- Offers related to the contract MUST contain the Callers address.
Accept Rent Offer Interfaceβ
- The existing contract MUST contain the Offer-Owner's address as Rentee.
- The existing contract MUST contain the start block.
- Provided Rent NFT Fee MUST change its ownership to the contract owner address.
- Provided Rent NFT Token Fee MUST be taken from Offer-Owner and send to contract owner address.
- Provided Renter Cancellation NFT Fee MUST change its ownership to escrow account.
- Provided Renter Cancellation Token Fee MUST be taken from the Offer-Owner and send to a escrow account.
Retract Rent Offer Interfaceβ
- Offers related to the contract MUST NOT contain the Callers address.
Change Subscription Terms Interfaceβ
- Contract MUST be updated with the new subscription and rent values
- Contract MUST be marked as changed.
Accept Subscription Terms Interfaceβ
- Contract MUST be marked as not-changed.
Rented Stateβ
If an NFT is in Rented state it means that the NFT renter cannot call any extrinsic (this includes but is not limited to: Transfer, Burn, List, Auction,...) on it besides the cancel_contract
or revoke_contract
.
If an NFT is in Rented state it means that the NFT rentee cannot call any extrinsic (this includes but is not limited to: Transfer, Burn, List, Auction,...) on it besides the revoke_contract
.
π End-to-end workflow (Ternoa-specific)β
Create Contract
Revoke Contract
Cancel Contract
Rent Contract
Make Rent Offer
Accept Rent Offer
Retract Rent Offer
Change Subscription Terms
Accept Subscription Terms
Test casesβ
- NFT Owner can create a Rental Contract
- Rentee can rent contract directly
- Rentee can make an offer on a contract
- Rentee can remove the contract offer
- Renter can accept an offer
- Renter can update subscription terms contract
- Rentee can accept new subscritpion terms contract
- Rentee can revoke contract
- Renter can revoke contract (if allowed and if not allowed)
- Renter can cancel contract
Referencesβ
TBD
Copyrightβ
TBD