Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
O
openzeppelin-contracts-upgradeable
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
俞永鹏
openzeppelin-contracts-upgradeable
Commits
d75ba162
Commit
d75ba162
authored
Oct 15, 2018
by
Nicolás Venturo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ERC721 contracts no longer initialize their parents (but have some safety checks).
parent
19610325
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
26 additions
and
25 deletions
+26
-25
ERC165.sol
contracts/introspection/ERC165.sol
+1
-1
ERC721FullMock.sol
contracts/mocks/ERC721FullMock.sol
+3
-2
ERC721MintableBurnableImpl.sol
contracts/mocks/ERC721MintableBurnableImpl.sol
+3
-2
ERC721PausableMock.sol
contracts/mocks/ERC721PausableMock.sol
+1
-0
ERC721.sol
contracts/token/ERC721/ERC721.sol
+4
-0
ERC721Burnable.sol
contracts/token/ERC721/ERC721Burnable.sol
+0
-4
ERC721Enumerable.sol
contracts/token/ERC721/ERC721Enumerable.sol
+5
-2
ERC721Full.sol
contracts/token/ERC721/ERC721Full.sol
+0
-9
ERC721Metadata.sol
contracts/token/ERC721/ERC721Metadata.sol
+5
-2
ERC721MetadataMintable.sol
contracts/token/ERC721/ERC721MetadataMintable.sol
+2
-1
ERC721Mintable.sol
contracts/token/ERC721/ERC721Mintable.sol
+1
-1
ERC721Pausable.sol
contracts/token/ERC721/ERC721Pausable.sol
+1
-1
No files found.
contracts/introspection/ERC165.sol
View file @
d75ba162
...
@@ -37,7 +37,7 @@ contract ERC165 is Initializable, IERC165 {
...
@@ -37,7 +37,7 @@ contract ERC165 is Initializable, IERC165 {
* @dev implement supportsInterface(bytes4) using a lookup table
* @dev implement supportsInterface(bytes4) using a lookup table
*/
*/
function supportsInterface(bytes4 interfaceId)
function supportsInterface(bytes4 interfaceId)
external
public
view
view
returns (bool)
returns (bool)
{
{
...
...
contracts/mocks/ERC721FullMock.sol
View file @
d75ba162
...
@@ -14,10 +14,11 @@ import "../token/ERC721/ERC721Burnable.sol";
...
@@ -14,10 +14,11 @@ import "../token/ERC721/ERC721Burnable.sol";
contract ERC721FullMock is ERC721Full, ERC721Mintable, ERC721MetadataMintable, ERC721Burnable {
contract ERC721FullMock is ERC721Full, ERC721Mintable, ERC721MetadataMintable, ERC721Burnable {
constructor(string name, string symbol) public
constructor(string name, string symbol) public
{
{
ERC721Full.initialize(name, symbol);
ERC721.initialize();
ERC721Metadata.initialize(name, symbol);
ERC721Enumerable.initialize();
ERC721Mintable.initialize(msg.sender);
ERC721Mintable.initialize(msg.sender);
ERC721MetadataMintable.initialize(msg.sender);
ERC721MetadataMintable.initialize(msg.sender);
ERC721Burnable.initialize();
}
}
function exists(uint256 tokenId) public view returns (bool) {
function exists(uint256 tokenId) public view returns (bool) {
...
...
contracts/mocks/ERC721MintableBurnableImpl.sol
View file @
d75ba162
...
@@ -15,9 +15,10 @@ contract ERC721MintableBurnableImpl
...
@@ -15,9 +15,10 @@ contract ERC721MintableBurnableImpl
constructor()
constructor()
public
public
{
{
ERC721Full.initialize("Test", "TEST");
ERC721.initialize();
ERC721Metadata.initialize("Test", "TEST");
ERC721Enumerable.initialize();
ERC721Mintable.initialize(msg.sender);
ERC721Mintable.initialize(msg.sender);
ERC721MetadataMintable.initialize(msg.sender);
ERC721MetadataMintable.initialize(msg.sender);
ERC721Burnable.initialize();
}
}
}
}
contracts/mocks/ERC721PausableMock.sol
View file @
d75ba162
...
@@ -10,6 +10,7 @@ import "./PauserRoleMock.sol";
...
@@ -10,6 +10,7 @@ import "./PauserRoleMock.sol";
*/
*/
contract ERC721PausableMock is ERC721Pausable, PauserRoleMock {
contract ERC721PausableMock is ERC721Pausable, PauserRoleMock {
constructor() {
constructor() {
ERC721.initialize();
ERC721Pausable.initialize(msg.sender);
ERC721Pausable.initialize(msg.sender);
}
}
...
...
contracts/token/ERC721/ERC721.sol
View file @
d75ba162
...
@@ -57,6 +57,10 @@ contract ERC721 is Initializable, ERC165, IERC721 {
...
@@ -57,6 +57,10 @@ contract ERC721 is Initializable, ERC165, IERC721 {
_registerInterface(_InterfaceId_ERC721);
_registerInterface(_InterfaceId_ERC721);
}
}
function _hasBeenInitialized() internal view returns (bool) {
return supportsInterface(_InterfaceId_ERC721);
}
/**
/**
* @dev Gets the balance of the specified address
* @dev Gets the balance of the specified address
* @param owner address to query the balance of
* @param owner address to query the balance of
...
...
contracts/token/ERC721/ERC721Burnable.sol
View file @
d75ba162
...
@@ -5,10 +5,6 @@ import "./ERC721.sol";
...
@@ -5,10 +5,6 @@ import "./ERC721.sol";
contract ERC721Burnable is Initializable, ERC721 {
contract ERC721Burnable is Initializable, ERC721 {
function initialize() public initializer {
ERC721.initialize();
}
function burn(uint256 tokenId)
function burn(uint256 tokenId)
public
public
{
{
...
...
contracts/token/ERC721/ERC721Enumerable.sol
View file @
d75ba162
...
@@ -31,13 +31,16 @@ contract ERC721Enumerable is Initializable, ERC165, ERC721, IERC721Enumerable {
...
@@ -31,13 +31,16 @@ contract ERC721Enumerable is Initializable, ERC165, ERC721, IERC721Enumerable {
* @dev Constructor function
* @dev Constructor function
*/
*/
function initialize() public initializer {
function initialize() public initializer {
ERC165.initialize();
require(ERC721._hasBeenInitialized());
ERC721.initialize();
// register the supported interface to conform to ERC721 via ERC165
// register the supported interface to conform to ERC721 via ERC165
_registerInterface(_InterfaceId_ERC721Enumerable);
_registerInterface(_InterfaceId_ERC721Enumerable);
}
}
function _hasBeenInitialized() internal view returns (bool) {
return supportsInterface(_InterfaceId_ERC721Enumerable);
}
/**
/**
* @dev Gets the token ID at a given index of the tokens list of the requested owner
* @dev Gets the token ID at a given index of the tokens list of the requested owner
* @param owner address owning the tokens list to be accessed
* @param owner address owning the tokens list to be accessed
...
...
contracts/token/ERC721/ERC721Full.sol
View file @
d75ba162
...
@@ -13,14 +13,5 @@ import "./ERC721Metadata.sol";
...
@@ -13,14 +13,5 @@ import "./ERC721Metadata.sol";
* @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
* @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
*/
*/
contract ERC721Full is Initializable, ERC721, ERC721Enumerable, ERC721Metadata {
contract ERC721Full is Initializable, ERC721, ERC721Enumerable, ERC721Metadata {
function initialize(string name, string symbol)
public
initializer
{
ERC721.initialize();
ERC721Enumerable.initialize();
ERC721Metadata.initialize(name, symbol);
}
uint256[50] private ______gap;
uint256[50] private ______gap;
}
}
contracts/token/ERC721/ERC721Metadata.sol
View file @
d75ba162
...
@@ -28,8 +28,7 @@ contract ERC721Metadata is Initializable, ERC165, ERC721, IERC721Metadata {
...
@@ -28,8 +28,7 @@ contract ERC721Metadata is Initializable, ERC165, ERC721, IERC721Metadata {
* @dev Constructor function
* @dev Constructor function
*/
*/
function initialize(string name, string symbol) public initializer {
function initialize(string name, string symbol) public initializer {
ERC165.initialize();
require(ERC721._hasBeenInitialized());
ERC721.initialize();
_name = name;
_name = name;
_symbol = symbol;
_symbol = symbol;
...
@@ -38,6 +37,10 @@ contract ERC721Metadata is Initializable, ERC165, ERC721, IERC721Metadata {
...
@@ -38,6 +37,10 @@ contract ERC721Metadata is Initializable, ERC165, ERC721, IERC721Metadata {
_registerInterface(InterfaceId_ERC721Metadata);
_registerInterface(InterfaceId_ERC721Metadata);
}
}
function _hasBeenInitialized() internal view returns (bool) {
return supportsInterface(InterfaceId_ERC721Metadata);
}
/**
/**
* @dev Gets the token name
* @dev Gets the token name
* @return string representing the token name
* @return string representing the token name
...
...
contracts/token/ERC721/ERC721MetadataMintable.sol
View file @
d75ba162
...
@@ -11,7 +11,8 @@ import "../../access/roles/MinterRole.sol";
...
@@ -11,7 +11,8 @@ import "../../access/roles/MinterRole.sol";
*/
*/
contract ERC721MetadataMintable is Initializable, ERC721, ERC721Metadata, MinterRole {
contract ERC721MetadataMintable is Initializable, ERC721, ERC721Metadata, MinterRole {
function initialize(address sender) public initializer {
function initialize(address sender) public initializer {
ERC721.initialize();
require(ERC721._hasBeenInitialized());
require(ERC721Metadata._hasBeenInitialized());
MinterRole.initialize(sender);
MinterRole.initialize(sender);
}
}
...
...
contracts/token/ERC721/ERC721Mintable.sol
View file @
d75ba162
...
@@ -11,7 +11,7 @@ import "../../access/roles/MinterRole.sol";
...
@@ -11,7 +11,7 @@ import "../../access/roles/MinterRole.sol";
*/
*/
contract ERC721Mintable is Initializable, ERC721, MinterRole {
contract ERC721Mintable is Initializable, ERC721, MinterRole {
function initialize(address sender) public initializer {
function initialize(address sender) public initializer {
ERC721.initialize(
);
require(ERC721._hasBeenInitialized()
);
MinterRole.initialize(sender);
MinterRole.initialize(sender);
}
}
...
...
contracts/token/ERC721/ERC721Pausable.sol
View file @
d75ba162
...
@@ -11,7 +11,7 @@ import "../../lifecycle/Pausable.sol";
...
@@ -11,7 +11,7 @@ import "../../lifecycle/Pausable.sol";
**/
**/
contract ERC721Pausable is Initializable, ERC721, Pausable {
contract ERC721Pausable is Initializable, ERC721, Pausable {
function initialize(address sender) public initializer {
function initialize(address sender) public initializer {
ERC721.initialize(
);
require(ERC721._hasBeenInitialized()
);
Pausable.initialize(sender);
Pausable.initialize(sender);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment