## [Draft proposal] This doc will change, it is just a placeholder for now
# Permits as Security extension to NFT Standards
## The problem that this standard extension is going to tackle and solve:
None of the existing standards that I examined are solving security issues that is tied to ownership of the token and its data.
Using ERC721 and ERC1155 the token is being transferred to marketplace which transfers the token after the sale passes. The creator of the NFT does not hold the ownership of the NFT but plaftform (marketplace) does which.
The ownership gets transferred to buyer of the NFT after the sale passes.
## Required:
ERC721
ERC1155
Both have `ApprovalForAll` function
## Simple Summary
A standard extension that requires to sign message after the sale ends on the platform.
This EIP requires to add `permit` function to the ERC721 Contract. A standard extension for any non-fungible token (NFT) to approve transaction.
Permit function is defined byb approve and transferFrom function
## Abstract
The standard outlines a smart contract function that represents sales function and authorship of the non fungible token. This EIP will improve UX of marketplaces as it would include arbitrary data so that the sale offer can be apart of this EIP.
Proposal to add signature to the ERC721 standard.
This EIP is implementing ERC712
### Functions
approve
The Permit would include `setAprovalForAll` function which will approve transaction to the owner.
takeOwnership
The Permit would sign the `takeOwnership` function which will approve and transfer Ownership from platform to buyer
### Events
Transfer
Permit will sign`transfer` event
Approval
Permit will sign `approval` event
## Usability of the Standard
Markerplace contract could just request the user to sign a approval message (no tx) and use that as part of the sale offer matching
Questions to answer:
what would the “permit” signature hold? Just the NFT ID & the amount of payment required?
the permit could include: uint256 tokenId, address recipient, address validator, bytes data
If validator == 0x0, then it can just transfer without doing anything
If validator isn’t 0x0, then it calls a function like beforeNFTTransfer(uint256 tokenId, address from, address to, bytes data)
Now that validator could handle the “payment”, such as a token transfer, etc