From 68e2c8282a882762f1d6723df570a4d63828257b Mon Sep 17 00:00:00 2001 From: Mick de Graaf Date: Mon, 16 Dec 2019 15:20:54 +0100 Subject: [PATCH 1/5] Made private methods internal to allow for overriding --- contracts/token/ERC777/ERC777.sol | 10 ++--- package-lock.json | 70 ++++++++++++++++++------------- 2 files changed, 45 insertions(+), 35 deletions(-) diff --git a/contracts/token/ERC777/ERC777.sol b/contracts/token/ERC777/ERC777.sol index 6946361092f..ec6e7779f7e 100644 --- a/contracts/token/ERC777/ERC777.sol +++ b/contracts/token/ERC777/ERC777.sol @@ -350,7 +350,7 @@ contract ERC777 is Context, IERC777, IERC20 { bytes memory operatorData, bool requireReceptionAck ) - private + internal { require(from != address(0), "ERC777: send from the zero address"); require(to != address(0), "ERC777: send to the zero address"); @@ -399,7 +399,7 @@ contract ERC777 is Context, IERC777, IERC20 { bytes memory userData, bytes memory operatorData ) - private + internal { _balances[from] = _balances[from].sub(amount, "ERC777: transfer amount exceeds balance"); _balances[to] = _balances[to].add(amount); @@ -408,7 +408,7 @@ contract ERC777 is Context, IERC777, IERC20 { emit Transfer(from, to, amount); } - function _approve(address holder, address spender, uint256 value) private { + function _approve(address holder, address spender, uint256 value) internal { // TODO: restore this require statement if this function becomes internal, or is called at a new callsite. It is // currently unnecessary. //require(holder != address(0), "ERC777: approve from the zero address"); @@ -435,7 +435,7 @@ contract ERC777 is Context, IERC777, IERC20 { bytes memory userData, bytes memory operatorData ) - private + internal { address implementer = ERC1820_REGISTRY.getInterfaceImplementer(from, TOKENS_SENDER_INTERFACE_HASH); if (implementer != address(0)) { @@ -463,7 +463,7 @@ contract ERC777 is Context, IERC777, IERC20 { bytes memory operatorData, bool requireReceptionAck ) - private + internal { address implementer = ERC1820_REGISTRY.getInterfaceImplementer(to, TOKENS_RECIPIENT_INTERFACE_HASH); if (implementer != address(0)) { diff --git a/package-lock.json b/package-lock.json index 455fc316377..60ef43fc122 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29092,14 +29092,15 @@ } }, "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", + "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", "dev": true, "optional": true, "requires": { + "bindings": "^1.5.0", "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" + "node-pre-gyp": "*" }, "dependencies": { "abbrev": { @@ -29147,7 +29148,7 @@ } }, "chownr": { - "version": "1.1.1", + "version": "1.1.3", "bundled": true, "dev": true, "optional": true @@ -29177,7 +29178,7 @@ "optional": true }, "debug": { - "version": "4.1.1", + "version": "3.2.6", "bundled": true, "dev": true, "optional": true, @@ -29204,12 +29205,12 @@ "optional": true }, "fs-minipass": { - "version": "1.2.5", + "version": "1.2.7", "bundled": true, "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "^2.6.0" } }, "fs.realpath": { @@ -29235,7 +29236,7 @@ } }, "glob": { - "version": "7.1.3", + "version": "7.1.6", "bundled": true, "dev": true, "optional": true, @@ -29264,7 +29265,7 @@ } }, "ignore-walk": { - "version": "3.0.1", + "version": "3.0.3", "bundled": true, "dev": true, "optional": true, @@ -29283,7 +29284,7 @@ } }, "inherits": { - "version": "2.0.3", + "version": "2.0.4", "bundled": true, "dev": true, "optional": true @@ -29325,7 +29326,7 @@ "optional": true }, "minipass": { - "version": "2.3.5", + "version": "2.9.0", "bundled": true, "dev": true, "optional": true, @@ -29335,12 +29336,12 @@ } }, "minizlib": { - "version": "1.2.1", + "version": "1.3.3", "bundled": true, "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "^2.9.0" } }, "mkdirp": { @@ -29353,24 +29354,24 @@ } }, "ms": { - "version": "2.1.1", + "version": "2.1.2", "bundled": true, "dev": true, "optional": true }, "needle": { - "version": "2.3.0", + "version": "2.4.0", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "^4.1.0", + "debug": "^3.2.6", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.12.0", + "version": "0.14.0", "bundled": true, "dev": true, "optional": true, @@ -29384,7 +29385,7 @@ "rc": "^1.2.7", "rimraf": "^2.6.1", "semver": "^5.3.0", - "tar": "^4" + "tar": "^4.4.2" } }, "nopt": { @@ -29398,13 +29399,22 @@ } }, "npm-bundled": { - "version": "1.0.6", + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { - "version": "1.4.1", + "version": "1.4.7", "bundled": true, "dev": true, "optional": true, @@ -29475,7 +29485,7 @@ "optional": true }, "process-nextick-args": { - "version": "2.0.0", + "version": "2.0.1", "bundled": true, "dev": true, "optional": true @@ -29516,7 +29526,7 @@ } }, "rimraf": { - "version": "2.6.3", + "version": "2.7.1", "bundled": true, "dev": true, "optional": true, @@ -29543,7 +29553,7 @@ "optional": true }, "semver": { - "version": "5.7.0", + "version": "5.7.1", "bundled": true, "dev": true, "optional": true @@ -29596,18 +29606,18 @@ "optional": true }, "tar": { - "version": "4.4.8", + "version": "4.4.13", "bundled": true, "dev": true, "optional": true, "requires": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", "mkdirp": "^0.5.0", "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" + "yallist": "^3.0.3" } }, "util-deprecate": { @@ -29632,7 +29642,7 @@ "optional": true }, "yallist": { - "version": "3.0.3", + "version": "3.1.1", "bundled": true, "dev": true, "optional": true @@ -30983,7 +30993,7 @@ }, "openzeppelin-docs-utils": { "version": "github:OpenZeppelin/docs-utils#dc7ce3006b6065cc4edebe53896644da5bd7dbec", - "from": "github:OpenZeppelin/docs-utils#dc7ce3006b6065cc4edebe53896644da5bd7dbec", + "from": "github:OpenZeppelin/docs-utils", "dev": true, "requires": { "chalk": "^3.0.0", From 3653e9ac6099c6a8e8611c0f3412b1f5e73437ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Venturo?= Date: Thu, 23 Jan 2020 16:24:53 -0300 Subject: [PATCH 2/5] Revert package.lock changes. --- package-lock.json | 70 ++++++++++++++++++++--------------------------- 1 file changed, 30 insertions(+), 40 deletions(-) diff --git a/package-lock.json b/package-lock.json index 60ef43fc122..455fc316377 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29092,15 +29092,14 @@ } }, "fsevents": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", - "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", "dev": true, "optional": true, "requires": { - "bindings": "^1.5.0", "nan": "^2.12.1", - "node-pre-gyp": "*" + "node-pre-gyp": "^0.12.0" }, "dependencies": { "abbrev": { @@ -29148,7 +29147,7 @@ } }, "chownr": { - "version": "1.1.3", + "version": "1.1.1", "bundled": true, "dev": true, "optional": true @@ -29178,7 +29177,7 @@ "optional": true }, "debug": { - "version": "3.2.6", + "version": "4.1.1", "bundled": true, "dev": true, "optional": true, @@ -29205,12 +29204,12 @@ "optional": true }, "fs-minipass": { - "version": "1.2.7", + "version": "1.2.5", "bundled": true, "dev": true, "optional": true, "requires": { - "minipass": "^2.6.0" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -29236,7 +29235,7 @@ } }, "glob": { - "version": "7.1.6", + "version": "7.1.3", "bundled": true, "dev": true, "optional": true, @@ -29265,7 +29264,7 @@ } }, "ignore-walk": { - "version": "3.0.3", + "version": "3.0.1", "bundled": true, "dev": true, "optional": true, @@ -29284,7 +29283,7 @@ } }, "inherits": { - "version": "2.0.4", + "version": "2.0.3", "bundled": true, "dev": true, "optional": true @@ -29326,7 +29325,7 @@ "optional": true }, "minipass": { - "version": "2.9.0", + "version": "2.3.5", "bundled": true, "dev": true, "optional": true, @@ -29336,12 +29335,12 @@ } }, "minizlib": { - "version": "1.3.3", + "version": "1.2.1", "bundled": true, "dev": true, "optional": true, "requires": { - "minipass": "^2.9.0" + "minipass": "^2.2.1" } }, "mkdirp": { @@ -29354,24 +29353,24 @@ } }, "ms": { - "version": "2.1.2", + "version": "2.1.1", "bundled": true, "dev": true, "optional": true }, "needle": { - "version": "2.4.0", + "version": "2.3.0", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "^3.2.6", + "debug": "^4.1.0", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.14.0", + "version": "0.12.0", "bundled": true, "dev": true, "optional": true, @@ -29385,7 +29384,7 @@ "rc": "^1.2.7", "rimraf": "^2.6.1", "semver": "^5.3.0", - "tar": "^4.4.2" + "tar": "^4" } }, "nopt": { @@ -29399,22 +29398,13 @@ } }, "npm-bundled": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", + "version": "1.0.6", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { - "version": "1.4.7", + "version": "1.4.1", "bundled": true, "dev": true, "optional": true, @@ -29485,7 +29475,7 @@ "optional": true }, "process-nextick-args": { - "version": "2.0.1", + "version": "2.0.0", "bundled": true, "dev": true, "optional": true @@ -29526,7 +29516,7 @@ } }, "rimraf": { - "version": "2.7.1", + "version": "2.6.3", "bundled": true, "dev": true, "optional": true, @@ -29553,7 +29543,7 @@ "optional": true }, "semver": { - "version": "5.7.1", + "version": "5.7.0", "bundled": true, "dev": true, "optional": true @@ -29606,18 +29596,18 @@ "optional": true }, "tar": { - "version": "4.4.13", + "version": "4.4.8", "bundled": true, "dev": true, "optional": true, "requires": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", "mkdirp": "^0.5.0", "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" + "yallist": "^3.0.2" } }, "util-deprecate": { @@ -29642,7 +29632,7 @@ "optional": true }, "yallist": { - "version": "3.1.1", + "version": "3.0.3", "bundled": true, "dev": true, "optional": true @@ -30993,7 +30983,7 @@ }, "openzeppelin-docs-utils": { "version": "github:OpenZeppelin/docs-utils#dc7ce3006b6065cc4edebe53896644da5bd7dbec", - "from": "github:OpenZeppelin/docs-utils", + "from": "github:OpenZeppelin/docs-utils#dc7ce3006b6065cc4edebe53896644da5bd7dbec", "dev": true, "requires": { "chalk": "^3.0.0", From dc22ca3835853d044eabc075ca37ef37add2b594 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Venturo?= Date: Thu, 23 Jan 2020 16:26:01 -0300 Subject: [PATCH 3/5] Make _move private again --- contracts/token/ERC777/ERC777.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/token/ERC777/ERC777.sol b/contracts/token/ERC777/ERC777.sol index ec6e7779f7e..f0641b82dbd 100644 --- a/contracts/token/ERC777/ERC777.sol +++ b/contracts/token/ERC777/ERC777.sol @@ -399,7 +399,7 @@ contract ERC777 is Context, IERC777, IERC20 { bytes memory userData, bytes memory operatorData ) - internal + private { _balances[from] = _balances[from].sub(amount, "ERC777: transfer amount exceeds balance"); _balances[to] = _balances[to].add(amount); From a5f7d885fc96b1bff68931fc8e74655e5c49f838 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Venturo?= Date: Thu, 23 Jan 2020 16:26:32 -0300 Subject: [PATCH 4/5] Expose the ERC1820 registry address --- contracts/token/ERC777/ERC777.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/token/ERC777/ERC777.sol b/contracts/token/ERC777/ERC777.sol index f0641b82dbd..2a91f25df27 100644 --- a/contracts/token/ERC777/ERC777.sol +++ b/contracts/token/ERC777/ERC777.sol @@ -28,7 +28,7 @@ contract ERC777 is Context, IERC777, IERC20 { using SafeMath for uint256; using Address for address; - IERC1820Registry constant private ERC1820_REGISTRY = IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24); + IERC1820Registry constant internal ERC1820_REGISTRY = IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24); mapping(address => uint256) private _balances; From 299104e707682fc14c6dfa1191cb65a7530e3f70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Venturo?= Date: Thu, 23 Jan 2020 16:31:41 -0300 Subject: [PATCH 5/5] Add changelog entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d8bece08f55..c359609bbf7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ ### Improvements * `ERC777`: `_burn` is now internal, providing more flexibility and making it easier to create tokens that deflate. ([#1908](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/1908)) * `ReentrancyGuard`: greatly improved gas efficiency by using the net gas metering mechanism introduced in the Istanbul hardfork. ([#1992](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/1992), [#1996](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/1996)) + * `ERC777`: improve extensibility by making `_send` and related functions `internal`. ([#2027](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2027)) ### Breaking changes * `ERC165Checker` now requires a minimum Solidity compiler version of 0.5.10. ([#1829](https://github.com/OpenZeppelin/openzeppelin-solidity/pull/1829))