ERC-721: Check ownership in transfer_token_from
#2093
Merged
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.
Summary
cargo-contract
orpallet-contracts
?The ERC-721 Specification states that
transferFrom
should throw iffrom
is not the owner of the token. The current implementation doesn't check that. As a result, it's possible for a callerA
who is allowed to transferB
's tokenT
, can calltransferFrom(C, A, T)
without any problem. A side effect is that the balance ofC
will be decremented instead ofB
.The
transfer()
function also has a similar issue: it seems the intention is to transfer the token from the caller, but the ownership is never checked explicitly. If the caller uses the id of an approved (not owned) token, it will incorrectly decrement the caller's balance.This PR addresses these issues by adding an ownership check in
transfer_token_from
. Tests fortransfer_from
andtransfer
have been added.Checklist before requesting a review
CHANGELOG.md