[IDEA] Don't rely on _beforeConsecutiveTokenTransfer for balance tracting #3744
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.
This PR
ERC721Concutive._batchBalances
to keep track of the tokens minted sequentially.ERC721._balances
when minting batches.Note: this uses the fact that
ERC721._balances
will overflow when transferring out a token that was minted in batch.The upside is that we don't need to manipulate the
ERC721._balances
in the_beforeConsecutiveTokenTransfer
. Unfortunately the hooks still have to be defined inERC721
so that ERC721Consecutive and ERC721Pausable can work together.The downside is that we now have two storage slots involved in balance tracking. The cost of transferring should be similar in the long run, but a bit higher at first since the two slot needs to be initialized. Also, any account that got token minted and batch and then transfer them will have both slots set to non zero value (when the sum is actually zero). In addition,
balanceOf
now need 2 sload, increasing the cost by 2100 gas (plus the mapping lookup).Is that worth it?
PR Checklist