## [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