InterviewDB
Question
NFT Borrowing Service - Design a Lending Protocol for Digital Assets
Onsite
Question Details
Round 1 Coding / OOD
Problem
Design a simplified NFT borrowing service. Users can list their NFTs for lending at a daily fee. Borrowers can rent an NFT for a fixed number of days and return it early. Implement the following interface:
python
class NFTBorrowingService:
def list_nft(self, nft_id: str, owner: str, daily_fee: float) -> bool:
pass
def borrow(self, nft_id: str, borrower: str, days: int, current_day: int) -> bool:
pass
def return_nft(self, nft_id: str, borrower: str, current_day: int) -> float:
**Returns** total fee charged (prorated to actual days held)
pass
def available_nfts(self) -> list:
**Returns** list of nft_ids currently available to borrow
pass
Example
service.list_nft("ape_001", "alice", 5.0) # listed at $5/day
service.borrow("ape_001", "bob", 10, day=0) # borrow for 10 days
service.available_nfts() # -> [] (ape_001 is out)
service.return_nft("ape_001", "bob", day=3) # returned early -> fee = 3 * 5.0 = 15.0
service.available_nfts() # -> ["ape_001"]
Follow-ups
- How do you handle an overdue return — should fees accumulate past the agreed days?
- What if the owner wants to cancel the listing while it is actively borrowed?
- How would you add a collateral system to protect lenders against non-returns?
- How would you redesign storage and lookups if the service scales to millions of NFTs?
Full Details
Round 1 Coding / OOD
Problem
Design a simplified NFT borrowing service. Users can list their NFTs for lending at a daily fee. Borrowers can rent an NFT for a fixed number of days and return it early. Implement the following interface:
python
class NFTBorrowingService:
def list_nft(self, nft_id: str, owner: str, daily_fee: float) -> bool:
pass
def borrow(self, nft_id: str, borrower: str, days: int, current_day: int) -> bool:
pass
def return_nft(self, nft_id: str, borrower: str, current_day: int) -> float:
**Returns** total fee charged (prorated to actual days held)
pass
def available_nfts(self) -> list:
**Returns** list of nft_ids currently available to borrow
pass
Example
service.list_nft("ape_001", "alice", 5.0) # listed at $5/day
service.borrow("ape_001", "bob", 10, day=0) # borrow for 10 days
service.available_nfts() # -> [] (ape_001 is out)
service.return_nft("ape_001", "bob", day=3) # returned early -> fee = 3 * 5.0 = 15.0
service.available_nfts() # -> ["ape_001"]
Follow-ups
- How do you handle an overdue return — should fees accumulate past the agreed days?
- What if the owner wants to cancel the listing while it is actively borrowed?
- How would you add a collateral system to protect lenders against non-returns?
- How would you redesign storage and lookups if the service scales to millions of NFTs?
Free preview. Unlock all Uniswap questions →
About This Question
This is a reported interview question from a uniswap interview during the onsite round.