GSN compatibility (#1880)
* switch to using Context internally
* add context import
* Add smoke test to make sure enabling GSN support works
* Update test/GSN/ERC721GSNRecipientMock.test.js
Co-Authored-By: Francisco Giordano <frangio.1@gmail.com>
* Upgrade truffle
* add missing awaits
* Revert "Upgrade truffle"
This reverts commit f9b0ba9019.
This commit is contained in:
committed by
Francisco Giordano
parent
f095b62856
commit
d1158ea68c
@ -1,5 +1,6 @@
|
||||
pragma solidity ^0.5.0;
|
||||
|
||||
import "../../GSN/Context.sol";
|
||||
import "./IERC721.sol";
|
||||
import "./IERC721Receiver.sol";
|
||||
import "../../math/SafeMath.sol";
|
||||
@ -11,7 +12,7 @@ import "../../introspection/ERC165.sol";
|
||||
* @title ERC721 Non-Fungible Token Standard basic implementation
|
||||
* @dev see https://eips.ethereum.org/EIPS/eip-721
|
||||
*/
|
||||
contract ERC721 is ERC165, IERC721 {
|
||||
contract ERC721 is Context, ERC165, IERC721 {
|
||||
using SafeMath for uint256;
|
||||
using Address for address;
|
||||
using Counters for Counters.Counter;
|
||||
@ -88,7 +89,7 @@ contract ERC721 is ERC165, IERC721 {
|
||||
address owner = ownerOf(tokenId);
|
||||
require(to != owner, "ERC721: approval to current owner");
|
||||
|
||||
require(msg.sender == owner || isApprovedForAll(owner, msg.sender),
|
||||
require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
|
||||
"ERC721: approve caller is not owner nor approved for all"
|
||||
);
|
||||
|
||||
@ -115,10 +116,10 @@ contract ERC721 is ERC165, IERC721 {
|
||||
* @param approved representing the status of the approval to be set
|
||||
*/
|
||||
function setApprovalForAll(address to, bool approved) public {
|
||||
require(to != msg.sender, "ERC721: approve to caller");
|
||||
require(to != _msgSender(), "ERC721: approve to caller");
|
||||
|
||||
_operatorApprovals[msg.sender][to] = approved;
|
||||
emit ApprovalForAll(msg.sender, to, approved);
|
||||
_operatorApprovals[_msgSender()][to] = approved;
|
||||
emit ApprovalForAll(_msgSender(), to, approved);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -141,7 +142,7 @@ contract ERC721 is ERC165, IERC721 {
|
||||
*/
|
||||
function transferFrom(address from, address to, uint256 tokenId) public {
|
||||
//solhint-disable-next-line max-line-length
|
||||
require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: transfer caller is not owner nor approved");
|
||||
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
|
||||
|
||||
_transferFrom(from, to, tokenId);
|
||||
}
|
||||
@ -167,14 +168,14 @@ contract ERC721 is ERC165, IERC721 {
|
||||
* which is called upon a safe transfer, and return the magic value
|
||||
* `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
|
||||
* the transfer is reverted.
|
||||
* Requires the msg.sender to be the owner, approved, or operator
|
||||
* Requires the _msgSender() to be the owner, approved, or operator
|
||||
* @param from current owner of the token
|
||||
* @param to address to receive the ownership of the given token ID
|
||||
* @param tokenId uint256 ID of the token to be transferred
|
||||
* @param _data bytes data to send along with a safe transfer check
|
||||
*/
|
||||
function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public {
|
||||
require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: transfer caller is not owner nor approved");
|
||||
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
|
||||
_safeTransferFrom(from, to, tokenId, _data);
|
||||
}
|
||||
|
||||
@ -330,7 +331,7 @@ contract ERC721 is ERC165, IERC721 {
|
||||
return true;
|
||||
}
|
||||
|
||||
bytes4 retval = IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data);
|
||||
bytes4 retval = IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data);
|
||||
return (retval == _ERC721_RECEIVED);
|
||||
}
|
||||
|
||||
|
||||
@ -1,19 +1,20 @@
|
||||
pragma solidity ^0.5.0;
|
||||
|
||||
import "../../GSN/Context.sol";
|
||||
import "./ERC721.sol";
|
||||
|
||||
/**
|
||||
* @title ERC721 Burnable Token
|
||||
* @dev ERC721 Token that can be irreversibly burned (destroyed).
|
||||
*/
|
||||
contract ERC721Burnable is ERC721 {
|
||||
contract ERC721Burnable is Context, ERC721 {
|
||||
/**
|
||||
* @dev Burns a specific ERC721 token.
|
||||
* @param tokenId uint256 id of the ERC721 token to be burned.
|
||||
*/
|
||||
function burn(uint256 tokenId) public {
|
||||
//solhint-disable-next-line max-line-length
|
||||
require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721Burnable: caller is not owner nor approved");
|
||||
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved");
|
||||
_burn(tokenId);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
pragma solidity ^0.5.0;
|
||||
|
||||
import "../../GSN/Context.sol";
|
||||
import "./IERC721Enumerable.sol";
|
||||
import "./ERC721.sol";
|
||||
import "../../introspection/ERC165.sol";
|
||||
@ -8,7 +9,7 @@ import "../../introspection/ERC165.sol";
|
||||
* @title ERC-721 Non-Fungible Token with optional enumeration extension logic
|
||||
* @dev See https://eips.ethereum.org/EIPS/eip-721
|
||||
*/
|
||||
contract ERC721Enumerable is ERC165, ERC721, IERC721Enumerable {
|
||||
contract ERC721Enumerable is Context, ERC165, ERC721, IERC721Enumerable {
|
||||
// Mapping from owner to list of owned token IDs
|
||||
mapping(address => uint256[]) private _ownedTokens;
|
||||
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
pragma solidity ^0.5.0;
|
||||
|
||||
import "../../GSN/Context.sol";
|
||||
import "./ERC721.sol";
|
||||
import "./IERC721Metadata.sol";
|
||||
import "../../introspection/ERC165.sol";
|
||||
|
||||
contract ERC721Metadata is ERC165, ERC721, IERC721Metadata {
|
||||
contract ERC721Metadata is Context, ERC165, ERC721, IERC721Metadata {
|
||||
// Token name
|
||||
string private _name;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user