-
Notifications
You must be signed in to change notification settings - Fork 5.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
EIP-2309: ERC-721 Consecutive Transfer Extension #2310
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pizzarob
force-pushed
the
master
branch
2 times, most recently
from
October 8, 2019 15:45
7e7e1c0
to
99b560e
Compare
pizzarob
changed the title
EIP-2309: ERC-712 Batch Mint Extension
EIP-2309: ERC-721 Batch Mint Extension
Oct 8, 2019
pizzarob
changed the title
EIP-2309: ERC-721 Batch Mint Extension
EIP-2309: ERC-721 Consecutive Transfer Extension
Oct 14, 2019
axic
reviewed
Oct 25, 2019
axic
reviewed
Oct 25, 2019
EIPS/eip-2309.md
Outdated
title: ERC-721 Consecutive Transfer Extension | ||
author: Sean Papanikolas (@pizza_r0b) | ||
discussions-to: https://github.com/ethereum/EIPs/issues/2309 | ||
status: Last Call |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should be a Draft not a last call.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks. Updated
axic
approved these changes
Oct 25, 2019
This was referenced Oct 26, 2019
ilanolkies
pushed a commit
to ilanolkies/EIPs
that referenced
this pull request
Nov 12, 2019
* EIP-2309: ERC-721 Batch Mint Extension * update name to consecutive transfer * update status to last call * Update status to draft
MadeofTin
pushed a commit
to MadeofTin/EIPs
that referenced
this pull request
Nov 13, 2019
* EIP-2309: ERC-721 Batch Mint Extension * update name to consecutive transfer * update status to last call * Update status to draft
tkstanczak
pushed a commit
to tkstanczak/EIPs
that referenced
this pull request
Nov 7, 2020
* EIP-2309: ERC-721 Batch Mint Extension * update name to consecutive transfer * update status to last call * Update status to draft
Arachnid
pushed a commit
to Arachnid/EIPs
that referenced
this pull request
Mar 6, 2021
* EIP-2309: ERC-721 Batch Mint Extension * update name to consecutive transfer * update status to last call * Update status to draft
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Original discussion in #2309
Simple Summary
A standardized event emitted when creating/transferring one, or many non-fungible tokens using consecutive token identifiers.
Abstract
The optional ERC-721 Consecutive Transfer Extension provides a standardized event which could be emitted during the creation/transfer of one, or many non-fungible tokens. This standard does not set the expectation of how you might create/transfer many tokens it is only concerned with the event emitted after the creation, or transfer of ownership of these tokens. This extension assumes that token identifiers are in consecutive order.
Motivation
This extension is provides even more scalibility of the ERC-721 specification. It is possible to create, transfer, and burn 2^255 non-fungible tokens in one transaction. However, it is not possible to emit that many
Transfer
events in one transaction. TheTransfer
event is part of the original specification which states:This allows for the original
Transfer
event to be emitted for one token at a time, which in turn gives us O(n) time complexity. Minting one billion NFTs can be done in one transaction using efficient data structures, but in order to emit theTransfer
event - according to the original spec - one would need a loop with one billion iterations which is bound to run out of gas, or exceed transaction timeout limits. This cannot be accomplished with the current spec. This extension solves that problem.Many decentralized marketplaces and block explorers utilize the
Transfer
event as a way to determine which NFTs an address owns. The Consecutive Transfer Extension provides a standard mechanism for these platforms to use to determine ownership of many tokens.Specification
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
RFC 2119.
ERC-721 compliant contracts MAY implement this Consecutive Transfer Extension to provide a standard event to be emitted at the time of creation, burn, or transfer of one or many consecutive tokens
The
ConsecutiveTransfer
event can be used for a single token as well as many tokens:Single token creation
emit ConsecutiveTransfer(1, 1, address(0), toAddress);
Batch token creation
emit ConsecutiveTransfer(1, 100000, address(0), toAddress);
Rationale
Standardizing the
ConsecutiveTransfer
event gives decentralized platforms a standard way of determining ownership of large quantities of non-fungible tokens without the need to support a new token standard. There are many ways in which the batch creation and transfer of NFTs can be implemented. The Consecutive Transfer Extension allows contract creators to implement batch creation, transfer, and burn methods however they see fit, but provides a standardized event in which all implementations can use. By specifying a range of consecutive token identifiers we can easily cover the transfer, or creation of 2^(256-1) tokens and decentralized platforms can react accordingly.Take this example. I sell lemons and have a farm with 10,000 lemon trees and 1,000 new lemon trees every few years. I want to turn each lemon tree into a non-fungible token that people can own. Each person that owns one of my non-fungible lemon tree tokens will receive a quarterly percentage of each harvest from that tree. The problem is that I would need to create and transfer each of these tokens individually - which will cost me a lot of time and money and frankly would keep me from doing this.
With this extension I would be able to to mint my initial 10,000 lemon tree tokens in one transaction. I would be able to quickly and cheaply mint my additional 1,000 lemon tree tokens when a new batch is planted. I would then be able to transfer all of the 10,000+ lemon tree tokens to a special smart contract that keeps track of the selling and distribution of funds in one transaction all while adhering to a specified standard.
Copyright
Copyright and related rights waived via CC0.