Skip to content

Commit c5e4a66

Browse files
Update ERC-7066: Move to Last Call
Merged by EIP-Bot.
1 parent 4901226 commit c5e4a66

File tree

1 file changed

+19
-18
lines changed

1 file changed

+19
-18
lines changed

ERCS/erc-7066.md

+19-18
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ title: Lockable Extension for ERC-721
44
description: Interface for enabling locking of ERC-721 using locker and approved
55
author: Piyush Chittara (@piyush-chittara), StreamNFT (@streamnft-tech), Srinivas Joshi (@SrinivasJoshi)
66
discussions-to: https://ethereum-magicians.org/t/eip-7066-lockable-extension-for-erc721/14425
7-
status: Review
7+
status: Last Call
8+
last-call-deadline: 2023-11-28
89
type: Standards Track
910
category: ERC
1011
created: 2023-05-25
@@ -13,20 +14,20 @@ requires: 165, 721
1314

1415
## Abstract
1516

16-
An extension of [ERC-721](./eip-721.md), this standard incorporates `locking` features into NFTs, allowing for various uses while preventing sale or transfer. The token's `owner` can `lock` it, setting up locker address (either an EOA or a contract) that exclusively holds the power to unlock the token. Owner can also provide approval for tokenId, enabling ability to lock asset while address holds the token approval. Token can also be locked by `approved`, assigning locker to itself. Upon token transfer, these rights get purged.
17+
An extension of [ERC-721](./erc-721.md), this standard incorporates `locking` features into NFTs, allowing for various uses while preventing sale or transfer. The token's `owner` can `lock` it, setting up locker address (either an EOA or a contract) that exclusively holds the power to unlock the token. Owner can also provide approval for `tokenId`, enabling ability to lock asset while address holds the token approval. Token can also be locked by `approved`, assigning locker to itself. Upon token transfer, these rights get purged.
1718

1819
## Motivation
1920

20-
[ERC-721](./eip-721.md) has sparked an unprecedented surge in demand for NFTs. However, despite this tremendous success, NFT economy suffers from secondary liquidity where it remains Illiquid in owner’s wallet. There are projects such as NFTfi, Paraspace which aims to address the liquidity challenge, but they entail below mentioned inconveniences and risks for owners as they necessitate transferring the participating NFTs to the projects' contracts.
21+
[ERC-721](./erc-721.md) has sparked an unprecedented surge in demand for NFTs. However, despite this tremendous success, the NFT economy suffers from secondary liquidity where it remains illiquid in owner’s wallet. There are projects which aim to address the liquidity challenge, but they entail the below mentioned inconveniences and risks for owners as they necessitate transferring the participating NFTs to the projects' contracts.
2122

2223
- Loss of utility: The utility value of NFTs diminishes when they are transferred to an escrow account, no longer remaining under the direct custody of the owners.
2324
- Lack of composability: The market could benefit from increased liquidity if NFT owners had access to multiple financial tools, such as leveraging loans and renting out their assets for maximum returns. Composability serves as the missing piece in creating a more efficient market.
2425
- Smart contract vulnerabilities: NFTs are susceptible to loss or theft due to potential bugs or vulnerabilities present in the smart contracts they rely on.
2526

26-
The aforementioned issues contribute to a poor user experience (UX), and we propose enhancing the [ERC-721](./eip-721.md) standard by implementing a native locking mechanism:
27+
The aforementioned issues contribute to a poor user experience (UX), and we propose enhancing the [ERC-721](./erc-721.md) standard by implementing a native locking mechanism:
2728
Rather than being transferred to a smart contract, an NFT remains securely stored in self-custody but is locked.
2829
During the lock period, the NFT's transfer is restricted while its other properties remain unchanged.
29-
NFT Owner retains the ability to use or distribute it’s utility
30+
NFT Owner retains the ability to use or distribute it’s utility.
3031

3132
NFTs have numerous use cases where the NFT must remain within the owner's wallet, even when it serves as collateral for a loan. Whether it's authorizing access to a Discord server, or utilizing NFT within a play-to-earn (P2E) game, owner should have the freedom to do so throughout the lending period. Just as real estate owner can continue living in their mortgaged house, take personal loan or keep tenants to generate passive income, these functionalities should be available to NFT owners to bring more investors in NFT economy.
3233

@@ -35,7 +36,7 @@ Lockable NFTs enable the following use cases :
3536

3637
- NFT-collateralized loans: Utilize NFT as collateral for a loan without locking it on the lending protocol contract. Instead, lock it within owner’s wallet while still enjoying all the utility of NFT.
3738
- No collateral rentals of NFTs: Borrow an NFT for a fee without the need for significant collateral. Renter can use the NFT but not transfer it, ensuring the lender's safety. The borrowing service contract automatically returns the NFT to the lender once the borrowing period expires.
38-
- Buy Now Pay Later: The buyer receives the locked NFT and can immediately begin using it. However, they are unable to sell the NFT until all installments are paid. Failure to complete the full payment results in the NFT returning to the seller, along with a fee.
39+
- Buy Now Pay Later (BNPL): The buyer receives the locked NFT and can immediately begin using it. However, they are unable to sell the NFT until all installments are paid. Failure to complete the full payment results in the NFT returning to the seller, along with a fee.
3940
- Composability: Maximize liquidity by having access to multiple financial tools. Imagine taking a loan against NFT and putting it on rentals to generate passive income.
4041
- Primary sales: Mint an NFT for a partial payment and settle the remaining amount once owner is satisfied with the collection's progress.
4142
- Soulbound: Organization can mint and self-assign `locker`, send token to user and lock the asset.
@@ -44,26 +45,26 @@ Lockable NFTs enable the following use cases :
4445
This proposal is different from other locking proposals in number of ways:
4546

4647
- This implementation provides a minimal implementation of `lock` and `unlock` and believes other conditions like time-bound are great ideas but can be achieved without creating a specific implementation. Locking and Unlocking can be based on any conditions (e.g. repayment, expiry). Therefore time-bound unlocks a relatively specific use case that can be achieved via smart-contracts themselves without that being a part of the token contract.
47-
- This implementation proposes a separation of rights between locker and approver. Token can be locked with approval and approved can unlock and withdraw tokens (opening up opportunities like renting, lending, bnpl etc), and token can be locked lacking the rights to revoke token, yet can unlock if required (opening up opportunities like account-bound NFTs).
48+
- This implementation proposes a separation of rights between locker and approver. Token can be locked with approval and approved can unlock and withdraw tokens (opening up opportunities like renting, lending, BNPL etc), and token can be locked lacking the rights to revoke token, yet can unlock if required (opening up opportunities like account-bound NFTs).
4849
- Our proposal implement ability to `transferAndLock` which can be used to transfer, lock and optionally approve token. Enabling the possibility of revocation after transfer.
4950

50-
By extending the [ERC-721](./eip-721.md) standard, the proposed standard enables secure and convenient management of underlying NFT assets. It natively supports prevalent NFTFi use cases such as staking, lending, and renting. We anticipate that this proposed standard will foster increased engagement of NFT owners in NFTFi projects, thereby enhancing the overall vitality of the NFT ecosystem.
51+
By extending the [ERC-721](./erc-721.md) standard, the proposed standard enables secure and convenient management of underlying NFT assets. It natively supports prevalent NFTFi use cases such as staking, lending, and renting. We anticipate that this proposed standard will foster increased engagement of NFT owners in NFTFi projects, thereby enhancing the overall vitality of the NFT ecosystem.
5152

5253
## Specification
5354

5455
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 and RFC 8174.
5556

5657
### Overview
5758

58-
[ERC-721](./eip-721.md) compliant contracts MAY implement this EIP to provide standard methods of locking and unlocking the token at its current owner address.
59+
[ERC-721](./erc-721.md) compliant contracts MAY implement this EIP to provide standard methods of locking and unlocking the token at its current owner address.
5960

6061
Token owner MAY `lock` the token and assign `locker` to some `address` using `lock(uint256 tokenId, address _locker)` function, this MUST set `locker` to `_locker`. Token owner or approved MAY `lock` the token using `lock(uint256 tokenId)` function, this MUST set `locker` to `msg.sender`. Token MAY be `unlocked` by `locker` using `unlock` function. `unlock` function MUST delete `locker` mapping and default to `address(0)`.
6162

6263
If the token is `locked`, the `lockerOf` function MUST return an address that is `locker` and can `unlock` the token. For tokens that are not `locked`, the `lockerOf` function MUST return `address(0)`.
6364

64-
`lock` function MUST revert if token is not already locked. `unlock` function MUST revert if token is not locked. ERC-721 `approve` function MUST revert if token is locked. ERC-721 `_tansfer` function MUST revert if token is locked. ERC-721 `_transfer` function MUST pass if token is locked and `msg.sender` is `approved` and `locker` both. After ERC-721 `_transfer`, values of `locker` and `approved` MUST be purged.
65+
`lock` function MUST revert if token is already `locked`. `unlock` function MUST revert if token is not `locked`. ERC-721 `approve` function MUST revert if token is `locked`. ERC-721 functions that transfer ownership of a token MUST revert if token is `locked`, unless `msg.sender` is `approved` and `locker` both. After ERC-721 token transfer function call, values of `locker` and `approved` MUST be purged.
6566

66-
Token MAY be transferred and `locked`, and OPTIONAL setup `approval` to `locker` using `transferAndLock` function. This is RECOMMENDED for use-cases where Token transfer and subsequent revocation is REQUIRED.
67+
Token MAY be transferred and `locked`, also assign `approval` to `locker` using `transferAndLock` function. This is RECOMMENDED for use-cases where Token transfer and subsequent revocation is REQUIRED.
6768

6869
### Interface
6970

@@ -126,28 +127,28 @@ This proposal exposes `transferAndLock(uint256 tokenId, address from, address to
126127

127128
## Backwards Compatibility
128129

129-
This standard is compatible with [ERC-721](./eip-721.md) standards.
130+
This standard is compatible with [ERC-721](./erc-721.md) standards.
130131

131-
Existing Upgradedable [ERC-721](./eip-721.md) can upgrade to this standard, enabling locking capability inherently and unlock underlying liquidity features.
132+
Existing Upgradedable [ERC-721](./erc-721.md) can upgrade to this standard, enabling locking capability inherently and unlock underlying liquidity features.
132133

133134
## Test Cases
134135

135-
Test cases can be found [here](../assets/eip-7066/test/test.js).
136+
Test cases can be found [here](../assets/erc-7066/test/test.js).
136137

137138
## Reference Implementation
138139

139-
Reference Interface can be found [here](../assets/eip-7066/IERC7066.sol).
140+
Reference Interface can be found [here](../assets/erc-7066/IERC7066.sol).
140141

141-
Reference Implementation can be found [here](../assets/eip-7066/ERC7066.sol).
142+
Reference Implementation can be found [here](../assets/erc-7066/ERC7066.sol).
142143

143144
## Security Considerations
144145

145-
There are no security considerations related directly to the implementation of this standard for the contract that manages [ERC-721](./eip-721.md).
146+
There are no security considerations related directly to the implementation of this standard for the contract that manages [ERC-721](./erc-721.md).
146147

147148
### Considerations for the contracts that work with lockable tokens
148149

149150
- Once `locked`, token can not be further `approved` or `transfered`.
150-
- If token is `locked` and caller is `locker` and `appoved` both, caller can transfer the token.
151+
- If token is `locked` and caller is `locker` and `approved` both, caller can transfer the token.
151152
- `locked` token with `locker` as in-accesible account or un-verified contract address can lead to permanent lock of the token.
152153
- There are no MEV considerations regarding lockable tokens as only authorized parties are allowed to lock and unlock.
153154

0 commit comments

Comments
 (0)