From ca19cea05eb1816936467df61df4b68d5353c130 Mon Sep 17 00:00:00 2001 From: Francisco Giordano Date: Mon, 9 Mar 2020 11:37:41 -0300 Subject: [PATCH 1/9] install @openzeppelin/docs-utils --- package-lock.json | 149 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 76 insertions(+), 75 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8a7aac90fd2..3455956d614 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1302,6 +1302,81 @@ "try-require": "^1.2.1" } }, + "@openzeppelin/docs-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/docs-utils/-/docs-utils-0.1.0.tgz", + "integrity": "sha512-KJigM8GDxEnUvxXgnirjTHSg2uZkmAoDXF0gOLFwbaJcBQqHbLql9HkrV/KzBKB31z4u6EM7DizTi7yUgT2ctQ==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "chokidar": "^3.3.0", + "env-paths": "^2.2.0", + "find-up": "^4.1.0", + "is-port-reachable": "^3.0.0", + "js-yaml": "^3.13.1", + "live-server": "^1.2.1", + "lodash.startcase": "^4.4.0", + "minimist": "^1.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "@openzeppelin/fuzzy-solidity-import-parser": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@openzeppelin/fuzzy-solidity-import-parser/-/fuzzy-solidity-import-parser-0.1.2.tgz", @@ -32264,80 +32339,6 @@ "mimic-fn": "^1.0.0" } }, - "openzeppelin-docs-utils": { - "version": "github:OpenZeppelin/docs-utils#459f1710a07ec02cbd683cab4800c32a07aed274", - "from": "github:OpenZeppelin/docs-utils#459f1710a07ec02cbd683cab4800c32a07aed274", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "chokidar": "^3.3.0", - "env-paths": "^2.2.0", - "find-up": "^4.1.0", - "is-port-reachable": "^3.0.0", - "js-yaml": "^3.13.1", - "live-server": "^1.2.1", - "lodash.startcase": "^4.4.0", - "minimist": "^1.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "opn": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz", diff --git a/package.json b/package.json index e8c1361f145..fac0a8d8b65 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "homepage": "https://openzeppelin.com/contracts/", "devDependencies": { "@openzeppelin/cli": "^2.7.1", + "@openzeppelin/docs-utils": "^0.1.0", "@openzeppelin/gsn-helpers": "^0.2.3", "@openzeppelin/gsn-provider": "^0.1.9", "@openzeppelin/test-environment": "^0.1.3", @@ -62,7 +63,6 @@ "lodash.startcase": "^4.4.0", "micromatch": "^4.0.2", "mocha": "^7.1.0", - "openzeppelin-docs-utils": "github:OpenZeppelin/docs-utils", "solhint": "^3.0.0-rc.3", "solidity-coverage": "github:rotcivegaf/solidity-coverage#5875f5b7bc74d447f3312c9c0e9fc7814b482477", "solidity-docgen": "^0.3.14" From e2813df879a4e4e74538d3c8bde0b50af8952597 Mon Sep 17 00:00:00 2001 From: Anton Bukov Date: Mon, 9 Mar 2020 19:02:14 +0300 Subject: [PATCH 2/9] Use bytes32 explicitly for Create2.computeAddress() (#2088) * Use bytes32 explicitly for Create2.computeAddress(), to force users cache hash of the bytecode * Remove only from test :) --- contracts/mocks/Create2Impl.sol | 10 +++------- contracts/utils/Create2.sol | 14 +++----------- test/utils/Create2.test.js | 14 ++------------ 3 files changed, 8 insertions(+), 30 deletions(-) diff --git a/contracts/mocks/Create2Impl.sol b/contracts/mocks/Create2Impl.sol index 93557489835..3b86e26174b 100644 --- a/contracts/mocks/Create2Impl.sol +++ b/contracts/mocks/Create2Impl.sol @@ -13,15 +13,11 @@ contract Create2Impl { Create2.deploy(salt, type(ERC20).creationCode); } - function computeAddress(bytes32 salt, bytes memory code) public view returns (address) { - return Create2.computeAddress(salt, code); + function computeAddress(bytes32 salt, bytes32 codeHash) public view returns (address) { + return Create2.computeAddress(salt, codeHash); } - function computeAddress(bytes32 salt, bytes memory code, address deployer) public pure returns (address) { - return Create2.computeAddress(salt, code, deployer); - } - - function computeAddress(bytes32 salt, bytes32 codeHash, address deployer) public pure returns (address) { + function computeAddressWithDeployer(bytes32 salt, bytes32 codeHash, address deployer) public pure returns (address) { return Create2.computeAddress(salt, codeHash, deployer); } } diff --git a/contracts/utils/Create2.sol b/contracts/utils/Create2.sol index 8c42cf0de0a..8db5d0fc53f 100644 --- a/contracts/utils/Create2.sol +++ b/contracts/utils/Create2.sol @@ -28,19 +28,11 @@ library Create2 { } /** - * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the `bytecode` + * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the `bytecodeHash` * or `salt` will result in a new destination address. */ - function computeAddress(bytes32 salt, bytes memory bytecode) internal view returns (address) { - return computeAddress(salt, bytecode, address(this)); - } - - /** - * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at - * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}. - */ - function computeAddress(bytes32 salt, bytes memory bytecode, address deployer) internal pure returns (address) { - return computeAddress(salt, keccak256(bytecode), deployer); + function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) { + return computeAddress(salt, bytecodeHash, address(this)); } /** diff --git a/test/utils/Create2.test.js b/test/utils/Create2.test.js index 61beeb53408..69c3c0f46eb 100644 --- a/test/utils/Create2.test.js +++ b/test/utils/Create2.test.js @@ -22,7 +22,7 @@ describe('Create2', function () { it('should compute the correct contract address', async function () { const onChainComputed = await this.factory - .computeAddress(saltHex, constructorByteCode); + .computeAddress(saltHex, web3.utils.keccak256(constructorByteCode)); const offChainComputed = computeCreate2Address(saltHex, constructorByteCode, this.factory.address); expect(onChainComputed).to.equal(offChainComputed); @@ -30,17 +30,7 @@ describe('Create2', function () { it('should compute the correct contract address with deployer', async function () { const onChainComputed = await this.factory - .methods['computeAddress(bytes32,bytes,address)'](saltHex, constructorByteCode, deployerAccount); - const offChainComputed = - computeCreate2Address(saltHex, constructorByteCode, deployerAccount); - expect(onChainComputed).to.equal(offChainComputed); - }); - - it('should compute the correct contract address with deployer and bytecode hash', async function () { - const onChainComputed = await this.factory - .methods['computeAddress(bytes32,bytes32,address)']( - saltHex, web3.utils.keccak256(constructorByteCode), deployerAccount - ); + .computeAddressWithDeployer(saltHex, web3.utils.keccak256(constructorByteCode), deployerAccount); const offChainComputed = computeCreate2Address(saltHex, constructorByteCode, deployerAccount); expect(onChainComputed).to.equal(offChainComputed); From 65e4ffde586ec89af3b7e9140bdc9235d1254853 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Venturo?= Date: Tue, 10 Mar 2020 20:13:32 -0300 Subject: [PATCH 3/9] Make ECDSA.recover revert on error. (#2114) * Make ECDSA.recover revert on error * Removed unused test * Remove duplicate line * Add tests for invalid signatures * Fix linter errors * Add changelog entry --- CHANGELOG.md | 5 +++ contracts/cryptography/ECDSA.sol | 15 ++++---- test/cryptography/ECDSA.test.js | 59 ++++++++++++++------------------ 3 files changed, 38 insertions(+), 41 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b446128f402..85e0cf6d5ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 3.0.0 (unreleased) + +### Breaking Changes + * `ECDSA`: when receiving an invalid signature, `recover` now reverts instead of returning the zero address. ([#2114](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/2114)) + ## 2.5.0 (2020-02-04) ### New features diff --git a/contracts/cryptography/ECDSA.sol b/contracts/cryptography/ECDSA.sol index 4651cb421be..46d412c7140 100644 --- a/contracts/cryptography/ECDSA.sol +++ b/contracts/cryptography/ECDSA.sol @@ -15,10 +15,6 @@ library ECDSA { * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * - * NOTE: This call _does not revert_ if the signature is invalid, or - * if the signer is otherwise unable to be retrieved. In those scenarios, - * the zero address is returned. - * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure @@ -28,7 +24,7 @@ library ECDSA { function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { // Check the signature length if (signature.length != 65) { - return (address(0)); + revert("ECDSA: invalid signature length"); } // Divide the signature in r, s and v variables @@ -55,15 +51,18 @@ library ECDSA { // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { - return address(0); + revert("ECDSA: invalid signature 's' value"); } if (v != 27 && v != 28) { - return address(0); + revert("ECDSA: invalid signature 'v' value"); } // If the signature is valid (and not malleable), return the signer address - return ecrecover(hash, v, r, s); + address signer = ecrecover(hash, v, r, s); + require(signer != address(0), "ECDSA: invalid signature"); + + return signer; } /** diff --git a/test/cryptography/ECDSA.test.js b/test/cryptography/ECDSA.test.js index 9e3b24e9a3c..8c6ec91f6a8 100644 --- a/test/cryptography/ECDSA.test.js +++ b/test/cryptography/ECDSA.test.js @@ -1,7 +1,6 @@ const { accounts, contract, web3 } = require('@openzeppelin/test-environment'); -const { constants, expectRevert } = require('@openzeppelin/test-helpers'); -const { ZERO_ADDRESS } = constants; +const { expectRevert } = require('@openzeppelin/test-helpers'); const { toEthSignedMessageHash, fixSignature } = require('../helpers/sign'); const { expect } = require('chai'); @@ -20,13 +19,15 @@ describe('ECDSA', function () { context('recover with invalid signature', function () { it('with short signature', async function () { - expect(await this.ecdsa.recover(TEST_MESSAGE, '0x1234')).to.equal(ZERO_ADDRESS); + await expectRevert(this.ecdsa.recover(TEST_MESSAGE, '0x1234'), 'ECDSA: invalid signature length'); }); it('with long signature', async function () { - // eslint-disable-next-line max-len - expect(await this.ecdsa.recover(TEST_MESSAGE, '0x01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789')) - .to.equal(ZERO_ADDRESS); + await expectRevert( + // eslint-disable-next-line max-len + this.ecdsa.recover(TEST_MESSAGE, '0x01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789'), + 'ECDSA: invalid signature length' + ); }); }); @@ -38,10 +39,10 @@ describe('ECDSA', function () { const signatureWithoutVersion = '0x5d99b6f7f6d1f73d1a26497f2b1c89b24c0993913f86e9a2d02cd69887d9c94f3c880358579d811b21dd1b7fd9bb01c1d81d10e69f0384e675c32b39643be892'; context('with 00 as version value', function () { - it('returns 0', async function () { + it('reverts', async function () { const version = '00'; const signature = signatureWithoutVersion + version; - expect(await this.ecdsa.recover(TEST_MESSAGE, signature)).to.equal(ZERO_ADDRESS); + await expectRevert(this.ecdsa.recover(TEST_MESSAGE, signature), 'ECDSA: invalid signature \'v\' value'); }); }); @@ -54,12 +55,12 @@ describe('ECDSA', function () { }); context('with wrong version', function () { - it('returns 0', async function () { + it('reverts', async function () { // The last two hex digits are the signature version. // The only valid values are 0, 1, 27 and 28. const version = '02'; const signature = signatureWithoutVersion + version; - expect(await this.ecdsa.recover(TEST_MESSAGE, signature)).to.equal(ZERO_ADDRESS); + await expectRevert(this.ecdsa.recover(TEST_MESSAGE, signature), 'ECDSA: invalid signature \'v\' value'); }); }); }); @@ -70,10 +71,10 @@ describe('ECDSA', function () { const signatureWithoutVersion = '0x331fe75a821c982f9127538858900d87d3ec1f9f737338ad67cad133fa48feff48e6fa0c18abc62e42820f05943e47af3e9fbe306ce74d64094bdf1691ee53e0'; context('with 01 as version value', function () { - it('returns 0', async function () { + it('reverts', async function () { const version = '01'; const signature = signatureWithoutVersion + version; - expect(await this.ecdsa.recover(TEST_MESSAGE, signature)).to.equal(ZERO_ADDRESS); + await expectRevert(this.ecdsa.recover(TEST_MESSAGE, signature), 'ECDSA: invalid signature \'v\' value'); }); }); @@ -86,23 +87,23 @@ describe('ECDSA', function () { }); context('with wrong version', function () { - it('returns 0', async function () { + it('reverts', async function () { // The last two hex digits are the signature version. // The only valid values are 0, 1, 27 and 28. const version = '02'; const signature = signatureWithoutVersion + version; - expect(await this.ecdsa.recover(TEST_MESSAGE, signature)).to.equal(ZERO_ADDRESS); + await expectRevert(this.ecdsa.recover(TEST_MESSAGE, signature), 'ECDSA: invalid signature \'v\' value'); }); }); }); context('with high-s value signature', function () { - it('returns 0', async function () { + it('reverts', async function () { const message = '0xb94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9'; // eslint-disable-next-line max-len const highSSignature = '0xe742ff452d41413616a5bf43fe15dd88294e983d3d36206c2712f39083d638bde0a0fc89be718fbc1033e1d30d78be1c68081562ed2e97af876f286f3453231d1b'; - expect(await this.ecdsa.recover(message, highSSignature)).to.equal(ZERO_ADDRESS); + await expectRevert(this.ecdsa.recover(message, highSSignature), 'ECDSA: invalid signature \'s\' value'); }); }); @@ -120,26 +121,19 @@ describe('ECDSA', function () { }); }); - context('with wrong signature', function () { - it('does not return signer address', async function () { - // Create the signature - const signature = await web3.eth.sign(TEST_MESSAGE, other); - - // Recover the signer address from the generated message and wrong signature. + context('with wrong message', function () { + it('returns a different address', async function () { + const signature = fixSignature(await web3.eth.sign(TEST_MESSAGE, other)); expect(await this.ecdsa.recover(WRONG_MESSAGE, signature)).to.not.equal(other); }); }); - }); - context('with small hash', function () { - // @TODO - remove `skip` once we upgrade to solc^0.5 - it.skip('reverts', async function () { - // Create the signature - const signature = await web3.eth.sign(TEST_MESSAGE, other); - await expectRevert( - this.ecdsa.recover(TEST_MESSAGE.substring(2), signature), - 'Failure message' - ); + context('with invalid signature', function () { + it('reverts', async function () { + // eslint-disable-next-line max-len + const signature = '0x332ce75a821c982f9127538858900d87d3ec1f9f737338ad67cad133fa48feff48e6fa0c18abc62e42820f05943e47af3e9fbe306ce74d64094bdf1691ee53e01c'; + await expectRevert(this.ecdsa.recover(TEST_MESSAGE, signature), 'ECDSA: invalid signature'); + }); }); }); }); @@ -147,7 +141,6 @@ describe('ECDSA', function () { context('toEthSignedMessage', function () { it('should prefix hashes correctly', async function () { expect(await this.ecdsa.toEthSignedMessageHash(TEST_MESSAGE)).to.equal(toEthSignedMessageHash(TEST_MESSAGE)); - expect(await this.ecdsa.toEthSignedMessageHash(TEST_MESSAGE)).to.equal(toEthSignedMessageHash(TEST_MESSAGE)); }); }); }); From 04490621262193b137824a5a94867df6bcb2e44f Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2020 12:56:26 -0300 Subject: [PATCH 4/9] Bump solhint from 3.0.0-rc.3 to 3.0.0-rc.5 (#2109) Bumps [solhint](https://github.com/protofire/solhint) from 3.0.0-rc.3 to 3.0.0-rc.5. - [Release notes](https://github.com/protofire/solhint/releases) - [Changelog](https://github.com/protofire/solhint/blob/master/CHANGELOG.md) - [Commits](https://github.com/protofire/solhint/commits) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- package-lock.json | 34 +++++++++++++++++----------------- package.json | 2 +- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3455956d614..39180956e58 100644 --- a/package-lock.json +++ b/package-lock.json @@ -436,12 +436,6 @@ "integrity": "sha512-7njiGBbFW0HCnuKNEJLcQt9EjfOzG8EJiXlFJwA3XfgiFxPVHmXrcF4d5yold2wfiwCwrXpeNTGZ854oRr6Hcw==", "dev": true }, - "@fvictorio/solidity-parser": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/@fvictorio/solidity-parser/-/solidity-parser-0.4.15.tgz", - "integrity": "sha512-DacgMagmysautS/MzbEmvgUOyoLxS6LSpMLFjINhUJFrG3OJXiihHMId6kOc08aiwlWHo+pd7C/z3ixm/gPPsQ==", - "dev": true - }, "@grpc/proto-loader": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.3.tgz", @@ -33911,12 +33905,11 @@ } }, "solhint": { - "version": "3.0.0-rc.3", - "resolved": "https://registry.npmjs.org/solhint/-/solhint-3.0.0-rc.3.tgz", - "integrity": "sha512-eWwptIMcOD16jn4OKZAhTvao2iQkpNkgeVJkwHfvZQLWaFsuZux2IW+vIgbw8mzVCyBT17Rd/NLzUxEsa/BCIw==", + "version": "3.0.0-rc.5", + "resolved": "https://registry.npmjs.org/solhint/-/solhint-3.0.0-rc.5.tgz", + "integrity": "sha512-6Yv9GmOXN5iVRfkHNYClccQFBpkrTMG3BD1mlXBM4quz0bj6muCko7Md/lGqdV9Mmrx7RSsxjV1g7ugxaavXow==", "dev": true, "requires": { - "@fvictorio/solidity-parser": "^0.4.15", "ajv": "^6.6.1", "antlr4": "4.7.1", "ast-parents": "0.0.1", @@ -33930,19 +33923,20 @@ "js-yaml": "^3.12.0", "lodash": "^4.17.11", "prettier": "^1.14.3", - "semver": "^6.3.0" + "semver": "^6.3.0", + "solidity-parser-diligence": "^0.4.18" }, "dependencies": { "acorn": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", - "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", "dev": true }, "ajv": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", - "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", + "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -34194,6 +34188,12 @@ "integrity": "sha512-4jtxasNGmyC0midtjH/lTFPZYvTTUMy6agYcF+HoMnzW8+cqo3piFrINb4ZCzpPW+7tTVFCGa5ubP34zOzeuMg==", "dev": true }, + "solidity-parser-diligence": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/solidity-parser-diligence/-/solidity-parser-diligence-0.4.18.tgz", + "integrity": "sha512-mauO/qG2v59W9sOn5TYV2dS7+fvFKqIHwiku+TH82e1Yca4H8s6EDG12ZpXO2cmgLlCKX3FOqqC73aYLB8WwNg==", + "dev": true + }, "solidity-parser-sc": { "version": "github:maxsam4/solidity-parser#3f0a30b97b460861654771871bcd970e73d47459", "from": "github:maxsam4/solidity-parser#solidity-0.5", diff --git a/package.json b/package.json index fac0a8d8b65..bd63e1c82fb 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "lodash.startcase": "^4.4.0", "micromatch": "^4.0.2", "mocha": "^7.1.0", - "solhint": "^3.0.0-rc.3", + "solhint": "^3.0.0-rc.5", "solidity-coverage": "github:rotcivegaf/solidity-coverage#5875f5b7bc74d447f3312c9c0e9fc7814b482477", "solidity-docgen": "^0.3.14" }, From 7acd60d152ea83dbc776265ca4a44a3c680b9caf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Venturo?= Date: Wed, 11 Mar 2020 15:26:21 -0300 Subject: [PATCH 5/9] Add notice about deprecated Crowdsales (#2116) * Remove crowdsales from sidebar documentation, add links to old version * Remove mentions of Crowdsales from the documentation --- contracts/payment/escrow/RefundEscrow.sol | 3 +- contracts/token/ERC20/ERC20Pausable.sol | 6 +- docs/modules/ROOT/nav.adoc | 1 - docs/modules/ROOT/pages/crowdsales.adoc | 259 +--------------------- docs/modules/ROOT/pages/gsn.adoc | 2 +- docs/modules/ROOT/pages/index.adoc | 2 +- 6 files changed, 12 insertions(+), 261 deletions(-) diff --git a/contracts/payment/escrow/RefundEscrow.sol b/contracts/payment/escrow/RefundEscrow.sol index aed8e620ad9..96d1c2d8a96 100644 --- a/contracts/payment/escrow/RefundEscrow.sol +++ b/contracts/payment/escrow/RefundEscrow.sol @@ -10,8 +10,7 @@ import "./ConditionalEscrow.sol"; * @dev The primary account (that is, the contract that instantiates this * contract) may deposit, close the deposit period, and allow for either * withdrawal by the beneficiary, or refunds to the depositors. All interactions - * with `RefundEscrow` will be made through the primary contract. See the - * `RefundableCrowdsale` contract for an example of `RefundEscrow`’s use. + * with `RefundEscrow` will be made through the primary contract. */ contract RefundEscrow is ConditionalEscrow { enum State { Active, Refunding, Closed } diff --git a/contracts/token/ERC20/ERC20Pausable.sol b/contracts/token/ERC20/ERC20Pausable.sol index f11d6676d6c..61d57b80595 100644 --- a/contracts/token/ERC20/ERC20Pausable.sol +++ b/contracts/token/ERC20/ERC20Pausable.sol @@ -7,9 +7,9 @@ import "../../lifecycle/Pausable.sol"; * @title Pausable token * @dev ERC20 with pausable transfers and allowances. * - * Useful if you want to stop trades until the end of a crowdsale, or have - * an emergency switch for freezing all token transfers in the event of a large - * bug. + * Useful for scenarios such as preventing trades until the end of an evaluation + * period, or having an emergency switch for freezing all token transfers in the + * event of a large bug. */ contract ERC20Pausable is ERC20, Pausable { /** diff --git a/docs/modules/ROOT/nav.adoc b/docs/modules/ROOT/nav.adoc index d9fdacba502..857d116b53b 100644 --- a/docs/modules/ROOT/nav.adoc +++ b/docs/modules/ROOT/nav.adoc @@ -5,7 +5,6 @@ * xref:tokens.adoc[Tokens] ** xref:erc20.adoc[ERC20] *** xref:erc20-supply.adoc[Creating Supply] -*** xref:crowdsales.adoc[Crowdsales] ** xref:erc721.adoc[ERC721] ** xref:erc777.adoc[ERC777] diff --git a/docs/modules/ROOT/pages/crowdsales.adoc b/docs/modules/ROOT/pages/crowdsales.adoc index f223666d778..37579211d1e 100644 --- a/docs/modules/ROOT/pages/crowdsales.adoc +++ b/docs/modules/ROOT/pages/crowdsales.adoc @@ -1,258 +1,11 @@ = Crowdsales -Crowdsales are a popular use for Ethereum; they let you allocate tokens to network participants in various ways, mostly in exchange for Ether. They come in a variety of shapes and flavors, so let's go over the various types available in OpenZeppelin Contracts and how to use them. +All crowdsale-related contracts were removed from the OpenZeppelin Contracts library on the https://forum.openzeppelin.com/t/openzeppelin-contracts-v3-0-beta-release/2256[v3.0.0 release] due to both a decline in their usage and the complexity associated with migrating them to Solidity v0.6. -Crowdsales have a bunch of different properties, but here are some important ones: +They are however still available on the v2.5 release of OpenZeppelin Contracts, which you can install by running: -* Price & Rate Configuration -* Does your crowdsale sell tokens at a fixed price? -* Does the price change over time or as a function of demand? -* Emission -* How is this token actually sent to participants? -* Validation — Who is allowed to purchase tokens? -* Are there KYC / AML checks? -* Is there a max cap on tokens? -* What if that cap is per-participant? -* Is there a starting and ending time frame? -* Distribution -* Does distribution of funds happen in real-time or after the crowdsale? -* Can participants receive a refund if the goal is not met? +```console +$ npm install @openzeppelin/contracts@v2.5 +``` -To manage all of the different combinations and flavors of crowdsales, Contracts provides a highly configurable xref:api:crowdsale.adoc#Crowdsale[`Crowdsale`] base contract that can be combined with various other functionalities to construct a bespoke crowdsale. - -[[crowdsale-rate]] -== Crowdsale Rate - -Understanding the rate of a crowdsale is super important, and mistakes here are a common source of bugs. - -✨ *HOLD UP FAM THIS IS IMPORTANT* ✨ - -Firstly, *all currency math is done in the smallest unit of that currency and converted to the correct decimal places when _displaying_ the currency*. - -This means that when you do math in your smart contracts, you need to understand that you're adding, dividing, and multiplying the smallest amount of a currency (like wei), _not_ the commonly-used displayed value of the currency (Ether). - -In Ether, the smallest unit of the currency is wei, and `1 ETH === 10^18 wei`. In tokens, the process is _very similar_: `1 TKN === 10^(decimals) TKNbits`. - -* The smallest unit of a token is "bits" or `TKNbits`. -* The display value of a token is `TKN`, which is `TKNbits * 10^(decimals)` - -What people usually call "one token" is actually a bunch of TKNbits, displayed to look like `1 TKN`. This is the same relationship that Ether and wei have. And what you're _always_ doing calculations in is *TKNbits and wei*. - -So, if you want to issue someone "one token for every 2 wei" and your decimals are 18, your rate is `0.5e18`. Then, when I send you `2 wei`, your crowdsale issues me `2 * 0.5e18 TKNbits`, which is exactly equal to `10^18 TKNbits` and is displayed as `1 TKN`. - -If you want to issue someone "`1 TKN` for every `1 ETH`", and your decimals are 18, your rate is `1`. This is because what's actually happening with the math is that the contract sees a user send `10^18 wei`, not `1 ETH`. Then it uses your rate of 1 to calculate `TKNbits = rate * wei`, or `1 * 10^18`, which is still `10^18`. And because your decimals are 18, this is displayed as `1 TKN`. - -One more for practice: if I want to issue "1 TKN for every dollar (USD) in Ether", we would calculate it as follows: - -* assume 1 ETH == $400 -* therefore, 10^18 wei = $400 -* therefore, 1 USD is `10^18 / 400`, or `2.5 * 10^15 wei` -* we have a decimals of 18, so we'll use `10 ^ 18 TKNbits` instead of `1 TKN` -* therefore, if the participant sends the crowdsale `2.5 * 10^15 wei` we should give them `10 ^ 18 TKNbits` -* therefore the rate is `2.5 * 10^15 wei === 10^18 TKNbits`, or `1 wei = 400 TKNbits` -* therefore, our rate is `400` - -(this process is pretty straightforward when you keep 18 decimals, the same as Ether/wei) - -[[token-emission]] -== Token Emission - -One of the first decisions you have to make is "how do I get these tokens to users?". This is usually done in one of three ways: - -* (default) — The `Crowdsale` contract owns tokens and simply transfers tokens from its own ownership to users that purchase them. -* xref:api:crowdsale.adoc#MintedCrowdsale[`MintedCrowdsale`] — The `Crowdsale` mints tokens when a purchase is made. -* xref:api:crowdsale.adoc#AllowanceCrowdsale[`AllowanceCrowdsale`] — The `Crowdsale` is granted an allowance to another wallet (like a Multisig) that already owns the tokens to be sold in the crowdsale. - -[[default-emission]] -=== Default Emission - -In the default scenario, your crowdsale must own the tokens that are sold. You can send the crowdsale tokens through a variety of methods, but here's what it looks like in Solidity: - -[source,solidity] ----- -IERC20(tokenAddress).transfer(CROWDSALE_ADDRESS, SOME_TOKEN_AMOUNT); ----- - -Then when you deploy your crowdsale, simply tell it about the token - -[source,solidity] ----- -new Crowdsale( - 1, // rate in TKNbits - MY_WALLET, // address where Ether is sent - TOKEN_ADDRESS // the token contract address -); ----- - -[[minted-crowdsale]] -=== Minted Crowdsale - -To use a xref:api:crowdsale.adoc#MintedCrowdsale[`MintedCrowdsale`], your token must also be a xref:api:token/ERC20.adoc#ERC20Mintable[`ERC20Mintable`] token that the crowdsale has permission to mint from. This can look like: - -[source,solidity] ----- -contract MyToken is ERC20, ERC20Mintable { - // ... see "Tokens" for more info -} - -contract MyCrowdsale is Crowdsale, MintedCrowdsale { - constructor( - uint256 rate, // rate in TKNbits - address payable wallet, - IERC20 token - ) - MintedCrowdsale() - Crowdsale(rate, wallet, token) - public - { - - } -} - -contract MyCrowdsaleDeployer { - constructor() - public - { - // create a mintable token - ERC20Mintable token = new MyToken(); - - // create the crowdsale and tell it about the token - Crowdsale crowdsale = new MyCrowdsale( - 1, // rate, still in TKNbits - msg.sender, // send Ether to the deployer - token // the token - ); - // transfer the minter role from this contract (the default) - // to the crowdsale, so it can mint tokens - token.addMinter(address(crowdsale)); - token.renounceMinter(); - } -} ----- - -[[allowancecrowdsale]] -=== AllowanceCrowdsale - -Use an xref:api:crowdsale.adoc#AllowanceCrowdsale[`AllowanceCrowdsale`] to send tokens from another wallet to the participants of the crowdsale. In order for this to work, the source wallet must give the crowdsale an allowance via the ERC20 xref:api:token/ERC20.adoc#IERC20-approve-address-uint256-[`approve`] method. - -[source,solidity] ----- -contract MyCrowdsale is Crowdsale, AllowanceCrowdsale { - constructor( - uint256 rate, - address payable wallet, - IERC20 token, - address tokenWallet // <- new argument - ) - AllowanceCrowdsale(tokenWallet) // <- used here - Crowdsale(rate, wallet, token) - public - { - - } -} ----- - -Then after the crowdsale is created, don't forget to approve it to use your tokens! - -[source,solidity] ----- -IERC20(tokenAddress).approve(CROWDSALE_ADDRESS, SOME_TOKEN_AMOUNT); ----- - -[[validation]] -== Validation - -There are a bunch of different validation requirements that your crowdsale might be a part of: - -* xref:api:crowdsale.adoc#CappedCrowdsale[`CappedCrowdsale`] — adds a cap to your crowdsale, invalidating any purchases that would exceed that cap -* xref:api:crowdsale.adoc#IndividuallyCappedCrowdsale[`IndividuallyCappedCrowdsale`] — caps an individual's contributions. -* xref:api:crowdsale.adoc#WhitelistCrowdsale[`WhitelistCrowdsale`] — only allow whitelisted participants to purchase tokens. this is useful for putting your KYC / AML whitelist on-chain! -* xref:api:crowdsale.adoc#TimedCrowdsale[`TimedCrowdsale`] — adds an xref:api:crowdsale.adoc#TimedCrowdsale-openingTime--[`openingTime`] and xref:api:Crowdsale.adoc#TimedCrowdsale-closingTime--[`closingTime`] to your crowdsale - -Simply mix and match these crowdsale flavors to your heart's content: - -[source,solidity] ----- -contract MyCrowdsale is Crowdsale, CappedCrowdsale, TimedCrowdsale { - - constructor( - uint256 rate, // rate, in TKNbits - address payable wallet, // wallet to send Ether - IERC20 token, // the token - uint256 cap, // total cap, in wei - uint256 openingTime, // opening time in unix epoch seconds - uint256 closingTime // closing time in unix epoch seconds - ) - CappedCrowdsale(cap) - TimedCrowdsale(openingTime, closingTime) - Crowdsale(rate, wallet, token) - public - { - // nice, we just created a crowdsale that's only open - // for a certain amount of time - // and stops accepting contributions once it reaches `cap` - } -} ----- - -[[distribution]] -== Distribution - -There comes a time in every crowdsale's life where it must relinquish the tokens it's been entrusted with. It's your decision as to when that happens! - -The default behavior is to release tokens as participants purchase them, but sometimes that may not be desirable. For example, what if we want to give users a refund if we don't hit a minimum raised in the sale? Or, maybe we want to wait until after the sale is over before users can claim their tokens and start trading them, perhaps for compliance reasons? - -OpenZeppelin Contracts is here to make that easy! - -[[postdeliverycrowdsale]] -=== PostDeliveryCrowdsale - -The xref:api:crowdsale.adoc#PostDeliveryCrowdsale[`PostDeliveryCrowdsale`], as its name implies, distributes tokens after the crowdsale has finished, letting users call xref:api:crowdsale.adoc#PostDeliveryCrowdsale-withdrawTokens_address-[`withdrawTokens`] in order to claim the tokens they've purchased. - -[source,solidity] ----- -contract MyCrowdsale is Crowdsale, TimedCrowdsale, PostDeliveryCrowdsale { - - constructor( - uint256 rate, // rate, in TKNbits - address payable wallet, // wallet to send Ether - IERC20 token, // the token - uint256 openingTime, // opening time in unix epoch seconds - uint256 closingTime // closing time in unix epoch seconds - ) - PostDeliveryCrowdsale() - TimedCrowdsale(openingTime, closingTime) - Crowdsale(rate, wallet, token) - public - { - // nice! this Crowdsale will keep all of the tokens until the end of the crowdsale - // and then users can `withdrawTokens()` to get the tokens they're owed - } -} ----- - -[[refundablecrowdsale]] -=== RefundableCrowdsale - -The xref:api:crowdsale.adoc#RefundableCrowdsale[`RefundableCrowdsale`] offers to refund users if a minimum goal is not reached. If the goal is not reached, the users can xref:api:crowdsale.adoc#RefundableCrowdsale-claimRefund-address-payable-[`claimRefund`] to get their Ether back. - -[source,solidity] ----- -contract MyCrowdsale is Crowdsale, RefundableCrowdsale { - - constructor( - uint256 rate, // rate, in TKNbits - address payable wallet, // wallet to send Ether - IERC20 token, // the token - uint256 goal // the minimum goal, in wei - ) - RefundableCrowdsale(goal) - Crowdsale(rate, wallet, token) - public - { - // nice! this crowdsale will, if it doesn't hit `goal`, allow everyone to get their money back - // by calling claimRefund(...) - } -} ----- +Refer to the https://docs.openzeppelin.com/contracts/2.x/crowdsales[v2.x documentation] when working with them. diff --git a/docs/modules/ROOT/pages/gsn.adoc b/docs/modules/ROOT/pages/gsn.adoc index a0882fe828e..592ffe4d2ad 100644 --- a/docs/modules/ROOT/pages/gsn.adoc +++ b/docs/modules/ROOT/pages/gsn.adoc @@ -6,7 +6,7 @@ If you're new to the GSN, you probably want to first take a look at the xref:lea == Receiving a Relayed Call -The first step to writing a recipient is to inherit from our GSNRecipient contract. If you're also inheriting from other contracts, such as ERC20 or Crowdsale, this will work just fine: adding GSNRecipient to all of your token or crowdsale functions will make them GSN-callable. +The first step to writing a recipient is to inherit from our GSNRecipient contract. If you're also inheriting from other contracts, such as ERC20, this will work just fine: adding GSNRecipient will make all of your token functions GSN-callable. ```solidity import "@openzeppelin/contracts/GSN/GSNRecipient.sol"; diff --git a/docs/modules/ROOT/pages/index.adoc b/docs/modules/ROOT/pages/index.adoc index 43976a8e4ea..ff3fbbd75d7 100644 --- a/docs/modules/ROOT/pages/index.adoc +++ b/docs/modules/ROOT/pages/index.adoc @@ -47,7 +47,7 @@ To keep your system secure, you should **always** use the installed code as-is, The guides in the sidebar will teach about different concepts, and how to use the related contracts that OpenZeppelin Contracts provides: * xref:access-control.adoc[Access Control]: decide who can perform each of the actions on your system. -* xref:tokens.adoc[Tokens]: create tradeable assets or collectives, and distribute them via xref:crowdsales.adoc[Crowdsales]. +* xref:tokens.adoc[Tokens]: create tradeable assets or collectibles, like the well known xref:erc20.adoc[ERC20] and xref:erc721.adoc[ERC721] standards. * xref:gsn.adoc[Gas Station Network]: let your users interact with your contracts without having to pay for gas themselves. * xref:utilities.adoc[Utilities]: generic useful tools, including non-overflowing math, signature verification, and trustless paying systems. From ed2c289c2c6f3003d8dce7d5f8d7276aefdfddb7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Mar 2020 17:54:03 -0300 Subject: [PATCH 6/9] Bump acorn from 6.4.0 to 6.4.1 (#2124) Bumps [acorn](https://github.com/acornjs/acorn) from 6.4.0 to 6.4.1. - [Release notes](https://github.com/acornjs/acorn/releases) - [Commits](https://github.com/acornjs/acorn/compare/6.4.0...6.4.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 39180956e58..bc8d4006ffd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4048,8 +4048,7 @@ "acorn": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", - "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", - "dev": true + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==" }, "acorn-jsx": { "version": "5.1.0", @@ -8344,11 +8343,6 @@ "negotiator": "0.6.2" } }, - "acorn": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", - "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==" - }, "acorn-jsx": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", @@ -21163,7 +21157,6 @@ "@webassemblyjs/helper-module-context": "1.8.5", "@webassemblyjs/wasm-edit": "1.8.5", "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.2.1", "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", "chrome-trace-event": "^1.0.2", @@ -21184,11 +21177,6 @@ "webpack-sources": "^1.4.1" }, "dependencies": { - "acorn": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", - "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==" - }, "cacache": { "version": "12.0.3", "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", From a949d4e2bf432da5f95031cbd50292299f368ada Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2020 13:28:05 -0300 Subject: [PATCH 7/9] Bump @openzeppelin/gsn-provider from 0.1.9 to 0.1.10 (#2126) Bumps [@openzeppelin/gsn-provider](https://github.com/OpenZeppelin/openzeppelin-gsn-provider) from 0.1.9 to 0.1.10. - [Release notes](https://github.com/OpenZeppelin/openzeppelin-gsn-provider/releases) - [Changelog](https://github.com/OpenZeppelin/openzeppelin-gsn-provider/blob/master/CHANGELOG.md) - [Commits](https://github.com/OpenZeppelin/openzeppelin-gsn-provider/compare/v0.1.9...v0.1.10) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- package-lock.json | 167 +++++++++++++++++++++++++++++----------------- package.json | 2 +- 2 files changed, 105 insertions(+), 64 deletions(-) diff --git a/package-lock.json b/package-lock.json index bc8d4006ffd..b8f2320b0e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1412,9 +1412,9 @@ } }, "@openzeppelin/gsn-provider": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@openzeppelin/gsn-provider/-/gsn-provider-0.1.9.tgz", - "integrity": "sha512-cGdQD/0XtSjBaUljmzDKYqvKmaHSEm3eIFFZXrNtsXuPhHsDwvcJ0raSMu3hKBhdX6e02iWk7VlirHY5BgU+lA==", + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/@openzeppelin/gsn-provider/-/gsn-provider-0.1.10.tgz", + "integrity": "sha512-DKuU5zVE1I+cbPWFb9kSTtIZ2OTnPfCedseBIbGMgaZM8HhW1O4iSlrqXWk+lQprQn/DF4DcxPgMPjDau2zp5w==", "dev": true, "requires": { "abi-decoder": "^2.1.0", @@ -4009,9 +4009,9 @@ } }, "abi-decoder": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/abi-decoder/-/abi-decoder-2.2.2.tgz", - "integrity": "sha512-viRNIt7FzBC9/Y99AVKsAvEMJsIe9Yc/PMrqYT7edSlZ4EnbXlxAq7hS08XTeMzjMP6DpoVrYyCwhSCskCPQqA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/abi-decoder/-/abi-decoder-2.3.0.tgz", + "integrity": "sha512-RZXG5mo1JhJjTBg/4NXlS8hyTr2fxiuFaz3UveRpoX9IIc3LPHmWz89dFqTHNQVbWi3VZqxSJqfUwWpb/mCHxA==", "dev": true, "requires": { "web3-eth-abi": "^1.2.1", @@ -5436,9 +5436,9 @@ "dev": true }, "core-js": { - "version": "2.6.10", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz", - "integrity": "sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", "dev": true }, "core-util-is": { @@ -5979,9 +5979,9 @@ } }, "eccrypto": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/eccrypto/-/eccrypto-1.1.2.tgz", - "integrity": "sha512-4z/uF18h2TFdqqtFSUvlwRD9epzmeEEUZ4nVMv3ox+jy+V7AxU9s3nLoEDDbptTUlkAbAp5bPfhaS7H4naoFqg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/eccrypto/-/eccrypto-1.1.3.tgz", + "integrity": "sha512-Xtyj039Xp2NDZwoe9IcD7pT1EwM4DILdxPCN2H7Rk1wgJNtTkFpk+cpX1QpuHTMaIhkatOBlGGKzGw/DUCDdqg==", "dev": true, "requires": { "acorn": "7.1.0", @@ -6642,26 +6642,29 @@ "dev": true }, "eth-crypto": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/eth-crypto/-/eth-crypto-1.5.0.tgz", - "integrity": "sha512-BSTlT/dnyB8it3MBDf1X/RCwVjbah44KYgPZNxIBpXRr7jEIXe1eF8h6ShXT+a3mpCb7SWd9aczhSB4KioCSZw==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/eth-crypto/-/eth-crypto-1.5.2.tgz", + "integrity": "sha512-xhu7rt3CdNKSQ5VcqiFwfp50YVtc1+VPiqYEfMa8Omx9rGn5QHdIjImSoEnlej3VbfHv25Kvpu6A5oPoSI6iUA==", "dev": true, "requires": { - "@types/bn.js": "4.11.5", + "@types/bn.js": "4.11.6", "babel-runtime": "6.26.0", - "eccrypto": "1.1.2", + "eccrypto": "1.1.3", "eth-lib": "0.2.8", - "ethereumjs-tx": "2.1.1", - "ethereumjs-util": "6.1.0", - "ethers": "4.0.37", - "secp256k1": "3.7.1" + "ethereumjs-tx": "2.1.2", + "ethereumjs-util": "6.2.0", + "ethers": "4.0.44", + "secp256k1": "3.8.0" }, "dependencies": { - "@types/node": { - "version": "10.17.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.0.tgz", - "integrity": "sha512-wuJwN2KV4tIRz1bu9vq5kSPasJ8IsEjZaP1ZR7KlmdUZvGF/rXy8DmXOVwUD0kAtvtJ7aqMKPqUXC0NUTDbrDg==", - "dev": true + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "requires": { + "@types/node": "*" + } }, "eth-lib": { "version": "0.2.8", @@ -6674,41 +6677,31 @@ "xhr-request-promise": "^0.1.2" } }, + "ethereumjs-common": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.0.tgz", + "integrity": "sha512-SZOjgK1356hIY7MRj3/ma5qtfr/4B5BL+G4rP/XSMYr2z1H5el4RX5GReYCKmQmYI/nSBmRnwrZ17IfHuG0viQ==", + "dev": true + }, "ethereumjs-tx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.1.tgz", - "integrity": "sha512-QtVriNqowCFA19X9BCRPMgdVNJ0/gMBS91TQb1DfrhsbR748g4STwxZptFAwfqehMyrF8rDwB23w87PQwru0wA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", + "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", "dev": true, "requires": { - "ethereumjs-common": "^1.3.1", + "ethereumjs-common": "^1.5.0", "ethereumjs-util": "^6.0.0" } }, - "ethereumjs-util": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", - "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "ethjs-util": "0.1.6", - "keccak": "^1.0.2", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.0.1" - } - }, "ethers": { - "version": "4.0.37", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.37.tgz", - "integrity": "sha512-B7bDdyQ45A5lPr6k2HOkEKMtYOuqlfy+nNf8glnRvWidkDQnToKw1bv7UyrwlbsIgY2mE03UxTVtouXcT6Vvcw==", + "version": "4.0.44", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.44.tgz", + "integrity": "sha512-kCkMPkpYjBkxzqjcuYUfDY7VHDbf5EXnfRPUOazdqdf59SvXaT+w5lgauxLlk1UjxnAiNfeNS87rkIXnsTaM7Q==", "dev": true, "requires": { - "@types/node": "^10.3.2", "aes-js": "3.0.0", "bn.js": "^4.4.0", - "elliptic": "6.3.3", + "elliptic": "6.5.2", "hash.js": "1.1.3", "js-sha3": "0.5.7", "scrypt-js": "2.0.4", @@ -6718,15 +6711,18 @@ }, "dependencies": { "elliptic": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", - "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", + "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", "dev": true, "requires": { "bn.js": "^4.4.0", "brorand": "^1.0.1", "hash.js": "^1.0.0", - "inherits": "^2.0.1" + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } } } @@ -6737,6 +6733,51 @@ "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=", "dev": true }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + }, + "secp256k1": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.8.0.tgz", + "integrity": "sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==", + "dev": true, + "requires": { + "bindings": "^1.5.0", + "bip66": "^1.1.5", + "bn.js": "^4.11.8", + "create-hash": "^1.2.0", + "drbg.js": "^1.0.1", + "elliptic": "^6.5.2", + "nan": "^2.14.0", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "elliptic": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", + "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + } + } + }, "uuid": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", @@ -6779,9 +6820,9 @@ } }, "eth-sig-util": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-2.5.0.tgz", - "integrity": "sha512-ahApxr+e1cls/GwcFSGsgRLrMqG6D6cBnK9CRHhx97O/s9ow+URIxbPvov8jfE70ZnNBdHMircoSCpi1b4QHjA==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-2.5.3.tgz", + "integrity": "sha512-KpXbCKmmBUNUTGh9MRKmNkIPietfhzBqqYqysDavLseIiMUGl95k6UcPEkALAZlj41e9E6yioYXc1PC333RKqw==", "dev": true, "requires": { "buffer": "^5.2.1", @@ -6808,9 +6849,9 @@ } }, "tweetnacl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.1.tgz", - "integrity": "sha512-kcoMoKTPYnoeS50tzoqjPY3Uv9axeuuFAZY9M/9zFnhoVvRfxz9K29IMPD7jGmt2c8SW7i3gT9WqDl2+nV7p4A==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", "dev": true } } @@ -35335,9 +35376,9 @@ "optional": true }, "tweetnacl-util": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.0.tgz", - "integrity": "sha1-RXbBzuXi1j0gf+5S8boCgZSAvHU=", + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", "dev": true }, "type": { diff --git a/package.json b/package.json index bd63e1c82fb..e3a7ff2bf1d 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@openzeppelin/cli": "^2.7.1", "@openzeppelin/docs-utils": "^0.1.0", "@openzeppelin/gsn-helpers": "^0.2.3", - "@openzeppelin/gsn-provider": "^0.1.9", + "@openzeppelin/gsn-provider": "^0.1.10", "@openzeppelin/test-environment": "^0.1.3", "@openzeppelin/test-helpers": "^0.5.4", "chai": "^4.2.0", From d14007d0357a55e3f673bd94647a3e96784db948 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2020 13:28:18 -0300 Subject: [PATCH 8/9] Bump @openzeppelin/test-helpers from 0.5.4 to 0.5.5 (#2127) Bumps [@openzeppelin/test-helpers](https://github.com/OpenZeppelin/openzeppelin-test-helpers) from 0.5.4 to 0.5.5. - [Release notes](https://github.com/OpenZeppelin/openzeppelin-test-helpers/releases) - [Changelog](https://github.com/OpenZeppelin/openzeppelin-test-helpers/blob/master/CHANGELOG.md) - [Commits](https://github.com/OpenZeppelin/openzeppelin-test-helpers/compare/v0.5.4...v0.5.5) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index b8f2320b0e1..537a3d52f9b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1848,16 +1848,16 @@ } }, "@openzeppelin/test-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@openzeppelin/test-helpers/-/test-helpers-0.5.4.tgz", - "integrity": "sha512-sSjft0CcmC6Pwsd/j1uakk2MLamEH4mmphVlF5hzUUVyoxL0KGCbxQgBoLoEpUbw2M9HtFAEMJJPGccEcb9Cog==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@openzeppelin/test-helpers/-/test-helpers-0.5.5.tgz", + "integrity": "sha512-jTSCQojQ0Q7FBMN3Me7o0OIVuRnfHRR9TcE+ZlfbSfdqrHkFLwSfeDHSNWtQGlF1xPQR5r3iRI0ccsCrN+JblA==", "dev": true, "requires": { "@openzeppelin/contract-loader": "^0.4.0", "@truffle/contract": "^4.0.35", "ansi-colors": "^3.2.3", "chai": "^4.2.0", - "chai-bn": "^0.2.0", + "chai-bn": "^0.2.1", "ethjs-abi": "^0.2.1", "lodash.flatten": "^4.4.0", "semver": "^5.6.0", @@ -5085,9 +5085,9 @@ } }, "chai-bn": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/chai-bn/-/chai-bn-0.2.0.tgz", - "integrity": "sha512-h+XqIFikre13N3uiZSc50PZ0VztVjuD/Gytle07EUFkbd8z31tWp37DLAsR1dPozmOLA3yu4hi3IFjJDQ5CKBg==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/chai-bn/-/chai-bn-0.2.1.tgz", + "integrity": "sha512-01jt2gSXAw7UYFPT5K8d7HYjdXj2vyeIuE+0T/34FWzlNcVbs1JkPxRu7rYMfQnJhrHT8Nr6qjSf5ZwwLU2EYg==", "dev": true }, "chalk": { diff --git a/package.json b/package.json index e3a7ff2bf1d..0248dc562a0 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "@openzeppelin/gsn-helpers": "^0.2.3", "@openzeppelin/gsn-provider": "^0.1.10", "@openzeppelin/test-environment": "^0.1.3", - "@openzeppelin/test-helpers": "^0.5.4", + "@openzeppelin/test-helpers": "^0.5.5", "chai": "^4.2.0", "eslint": "^6.5.1", "eslint-config-standard": "^14.1.0", From 68ad1ed18fcce4ea625b82df32941a7771b576d5 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2020 13:28:42 -0300 Subject: [PATCH 9/9] Bump @openzeppelin/cli from 2.7.1 to 2.7.2 (#2129) Bumps [@openzeppelin/cli](https://github.com/OpenZeppelin/openzeppelin-sdk) from 2.7.1 to 2.7.2. - [Release notes](https://github.com/OpenZeppelin/openzeppelin-sdk/releases) - [Commits](https://github.com/OpenZeppelin/openzeppelin-sdk/compare/v2.7.1...v2.7.2) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- package-lock.json | 473 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 237 insertions(+), 238 deletions(-) diff --git a/package-lock.json b/package-lock.json index 537a3d52f9b..7c76ab2d9e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -62,293 +62,293 @@ } }, "@firebase/analytics": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.2.13.tgz", - "integrity": "sha512-FAvpVS3dmfeCcYdxl7msz3Fr9OOLp/EYfDAx4T1yKi3dfTOXALH6pJK1hNjWjmGMq0qAWPmOFfAdpzd13Q0Uag==", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.2.17.tgz", + "integrity": "sha512-5/b3DdRmFdhuqWufk9qrFms0fjDEYIDt/dMNJ3BFNPF+j4Uo89q8DPT71vxgXdx1Dsj4aJENFmrxSRpLe3n8sQ==", "dev": true, "requires": { - "@firebase/analytics-types": "0.2.6", - "@firebase/component": "0.1.5", - "@firebase/installations": "0.4.2", - "@firebase/util": "0.2.40", - "tslib": "1.10.0" + "@firebase/analytics-types": "0.2.8", + "@firebase/component": "0.1.7", + "@firebase/installations": "0.4.5", + "@firebase/util": "0.2.42", + "tslib": "1.11.1" }, "dependencies": { "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", "dev": true } } }, "@firebase/analytics-types": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.2.6.tgz", - "integrity": "sha512-G4wGsWCxVibT4vHHTzFXi0uXk91upPUMYQyKnVEq4E9Qr491+EyyT3xH/6k+Hxj4/bGeK0lhJ4czMd1R5cOWwg==", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.2.8.tgz", + "integrity": "sha512-7djG+mVLubSFy5ZEf8Gyn7XzrsLvpXCRj+vj6ta3KtwF2iCsOG4HvGv1TiU+sNwR017cAm2F0qmaAMac90Qq0g==", "dev": true }, "@firebase/app": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.5.4.tgz", - "integrity": "sha512-a+Z13FB/Om3JAv6wTUUW/X8ikRmK66fvbLCGPUKoUtqKow1zxeUelznyKNhF4/WA2wxpo3w5OXzp0G9U09Lecw==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.5.6.tgz", + "integrity": "sha512-FzO0dgIXQgLFOETdM3p6zMdGTee+hnOUqU0KC24n8+gqX833atGX4Vrc47H53EAiR7sW6ESHsyAfJcvGPBi37Q==", "dev": true, "requires": { - "@firebase/app-types": "0.5.1", - "@firebase/component": "0.1.5", - "@firebase/logger": "0.1.35", - "@firebase/util": "0.2.40", + "@firebase/app-types": "0.5.3", + "@firebase/component": "0.1.7", + "@firebase/logger": "0.1.37", + "@firebase/util": "0.2.42", "dom-storage": "2.1.0", - "tslib": "1.10.0", + "tslib": "1.11.1", "xmlhttprequest": "1.8.0" }, "dependencies": { "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", "dev": true } } }, "@firebase/app-types": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.5.1.tgz", - "integrity": "sha512-fhe4KxEoRLD596tuIkvBXVHedVByI5ALzf5nMraOXsnBxLY0gKcMSXQGwwPxZyeUt/S1VM8DRVXOg9shegEO7g==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.5.3.tgz", + "integrity": "sha512-PH1egwhlEhZSp7/jiUNszG1BX1NBUuL86Zd1ZoXT3qaFS9YSGGEY7n0DKgI0fWoVa5GzfbzKOC+J1e4T/+PY1Q==", "dev": true }, "@firebase/auth": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.13.5.tgz", - "integrity": "sha512-0s/ULeqstzQ/Xi0ZgJnasYXH4WtTRaa9LztPv9gXHjwmOt/GtFnRUeW0RqDCmF4A2uikanMFm5+wtm80BkfpTg==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.14.0.tgz", + "integrity": "sha512-3g3VylIUwNzzQ9xhfF5b+M3W+51bcvvbz+J/u9oXcvEvmy+MC1jJVrTYdQ5zg5vt+PrKzpRCY28N+uVcDO+Dug==", "dev": true, "requires": { - "@firebase/auth-types": "0.9.5" + "@firebase/auth-types": "0.10.0" } }, "@firebase/auth-interop-types": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.2.tgz", - "integrity": "sha512-FW4wNZbGSBpA8SgJy8EFdx0lPGm8a25zojI48kbV+QNn4EizJ1jbLPGtmBeEJJPFI4Ij+9EuCbsV1iwelZzDaA==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.4.tgz", + "integrity": "sha512-CLKNS84KGAv5lRnHTQZFWoR11Ti7gIPFirDDXWek/fSU+TdYdnxJFR5XSD4OuGyzUYQ3Dq7aVj5teiRdyBl9hA==", "dev": true }, "@firebase/auth-types": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.9.5.tgz", - "integrity": "sha512-nXruvfY/S3q2PhKR/vMfWGkn/zZY0JTT07R/aEdClYRDV7AZDhmgCi3m5HZmj+bMPz7PeZT/w1tUuNLjUqJV2A==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.10.0.tgz", + "integrity": "sha512-VuW7c+RAk3AYPU0Hxmun3RzXn7fbJDdjQbxvvpRMnQ9zrhk8mH42cY466M0n4e/UGQ+0smlx5BqZII8aYQ5XPg==", "dev": true }, "@firebase/component": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.1.5.tgz", - "integrity": "sha512-oxRmOEIW3YbJVchLZKXiP4nJlKDCNLCQRdFdcO23IfJnaWePZofh4v5nT3XSJ6ouWlGIpENLZgoXjv2QrGFXfg==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.1.7.tgz", + "integrity": "sha512-FAoi1ELlrVY9Uy9zzTlhc+3nn5VdYe36C/OpDnFXb2K/AH0jR6wcVTvLqGYFBPFVjgqO5MKCn3Mq3DCnro8QGg==", "dev": true, "requires": { - "@firebase/util": "0.2.40", - "tslib": "1.10.0" + "@firebase/util": "0.2.42", + "tslib": "1.11.1" }, "dependencies": { "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", "dev": true } } }, "@firebase/database": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.5.21.tgz", - "integrity": "sha512-NlndeAr88Rfi6LbeHF0/YaTkapns6K6bLGVu2w22oivHjZxLfR4aoyN2172yzhPpwEPN7iYhkkz/ZQi11CzL4g==", + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.5.23.tgz", + "integrity": "sha512-6zVa3dJoUT8bpiSai/aIbGPEDrGaFwR1iMMmXCYSf6su46ZYMLOYjSV/+nOHZaT4/TyQZY3D+iIL0WyRuEVOjA==", "dev": true, "requires": { - "@firebase/auth-interop-types": "0.1.2", - "@firebase/component": "0.1.5", - "@firebase/database-types": "0.4.11", - "@firebase/logger": "0.1.35", - "@firebase/util": "0.2.40", + "@firebase/auth-interop-types": "0.1.4", + "@firebase/component": "0.1.7", + "@firebase/database-types": "0.4.13", + "@firebase/logger": "0.1.37", + "@firebase/util": "0.2.42", "faye-websocket": "0.11.3", - "tslib": "1.10.0" + "tslib": "1.11.1" }, "dependencies": { "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", "dev": true } } }, "@firebase/database-types": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.4.11.tgz", - "integrity": "sha512-+SiBjnufVhRSJg078feQWH7yHQncRjX+23NUgvBCRFXNBwUVvmPenNXYhCpF8XbhSOrC7BvfcRZTGqeI7+ZUdg==", + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.4.13.tgz", + "integrity": "sha512-7bDsD90Q9YmmB/A90UnZLv7jqgULClxAT1C4aw1dGfcS49XEUh2uuoW3NqS5vvtbMHJiurrN73ADddwgCrltww==", "dev": true, "requires": { - "@firebase/app-types": "0.5.1" + "@firebase/app-types": "0.5.3" } }, "@firebase/firestore": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-1.10.2.tgz", - "integrity": "sha512-Ay9V7eLYNEt12STCfmUxtyu4IBWIgOONzxoRUnkK1nmNbvket7XhSCfij4P4pi3qx4kdpp+hzjUl6ndVbh7y5Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-1.12.1.tgz", + "integrity": "sha512-HE++zHqOtLb/N7bhsiBR5uzBnHPVmEunz2vMC/jaJSIR/oBYVTIanMTzUxzOavUrII/9wnqFw3R2p0CY/CD9ow==", "dev": true, "requires": { - "@firebase/component": "0.1.5", - "@firebase/firestore-types": "1.9.1", - "@firebase/logger": "0.1.35", - "@firebase/util": "0.2.40", - "@firebase/webchannel-wrapper": "0.2.35", + "@firebase/component": "0.1.7", + "@firebase/firestore-types": "1.10.1", + "@firebase/logger": "0.1.37", + "@firebase/util": "0.2.42", + "@firebase/webchannel-wrapper": "0.2.37", "@grpc/proto-loader": "^0.5.0", "grpc": "1.24.2", - "tslib": "1.10.0" + "tslib": "1.11.1" }, "dependencies": { "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", "dev": true } } }, "@firebase/firestore-types": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-1.9.1.tgz", - "integrity": "sha512-w3pT+RMQOORS8Tvf6wCaW8sq8hklPS4FkWSGCyo/gIbATP7pG8rvQDihN1x6D3if1jILWiZ/uPyl0eazm+MGzw==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-1.10.1.tgz", + "integrity": "sha512-vyKdm+AYUFT8XeUX62IOqaqPFCs/mAMoSEsqIz9HnSVsqCw/IocNjtjSa+3M80kRw4V8fI7JI+Xz6Wg5VJXLqA==", "dev": true }, "@firebase/functions": { - "version": "0.4.32", - "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.4.32.tgz", - "integrity": "sha512-0v8YkEElryo7Apx1S+eTUBR/yz/Gatj064hy37AWNN9n5oUjRyrkwl40/YywFPw15AZPB8ItoEx+wJBnyFjgUw==", + "version": "0.4.37", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.4.37.tgz", + "integrity": "sha512-nNIW6KEQ8V0JVFlwSfJUs10LJIr3pjltSVA3ulDow3SeYl+VO+1tKsZUaG59CCSqHCIDkJJ3quBpFK36v141vQ==", "dev": true, "requires": { - "@firebase/component": "0.1.5", - "@firebase/functions-types": "0.3.14", - "@firebase/messaging-types": "0.4.2", + "@firebase/component": "0.1.7", + "@firebase/functions-types": "0.3.16", + "@firebase/messaging-types": "0.4.4", "isomorphic-fetch": "2.2.1", - "tslib": "1.10.0" + "tslib": "1.11.1" }, "dependencies": { "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", "dev": true } } }, "@firebase/functions-types": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.3.14.tgz", - "integrity": "sha512-G7wq6fahQuXbiSf/PbffWnWXNaYKsT9ECvps/2hTKXevZfeWEhDju40c/XFIDI2dcSnTfOYiKoRP8Mp7hi7/CQ==", + "version": "0.3.16", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.3.16.tgz", + "integrity": "sha512-kHhBvSYiY2prY4vNQCALYs1+OruTdylvGemHG6G6Bs/rj3qw7ui3WysBsDU/rInJitHIcsZ35qrtanoJeQUIXQ==", "dev": true }, "@firebase/installations": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.4.2.tgz", - "integrity": "sha512-g8GDRRikxY7U1rUe9xdAKShCz2/S5CdlYOnYP4Qm+kaJDbfQvAZRRRhpo4sIg7cpoxZ5dSVbl64YyEZzVS7XtA==", + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.4.5.tgz", + "integrity": "sha512-mIWpG9r98fiuh6yc0mPSoXzw/UV7UVSuvxpIqrdBT7P2o3ADDH1usyTq6QhSmb94HJhSG3QTj7VdV9wu/rcy7w==", "dev": true, "requires": { - "@firebase/component": "0.1.5", - "@firebase/installations-types": "0.3.1", - "@firebase/util": "0.2.40", + "@firebase/component": "0.1.7", + "@firebase/installations-types": "0.3.3", + "@firebase/util": "0.2.42", "idb": "3.0.2", - "tslib": "1.10.0" + "tslib": "1.11.1" }, "dependencies": { "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", "dev": true } } }, "@firebase/installations-types": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.3.1.tgz", - "integrity": "sha512-VU2Ssgy+rZx1LLra3e3CtYQ6cyZHMsg8zO6HVK3sf83qEOWMmWFPxLgjmyrCx+YDSY4A0TwmwFi2I7Mh98WY7w==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.3.3.tgz", + "integrity": "sha512-XvWhPPAGeZlc+CfCA8jTt2pv19Jovi/nUV73u30QbjBbk5xci9bp5I29aBZukHsR6YNBjFCLSkLPbno4m/bLUg==", "dev": true }, "@firebase/logger": { - "version": "0.1.35", - "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.1.35.tgz", - "integrity": "sha512-T7I/0+IQrlPAm/uUw6xeyJH5Msi8P6in/0LUtz2XQn2+LVBqyatlr+Nod9AldDCZehwLySEAFhXlqhb3BrI5GA==", + "version": "0.1.37", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.1.37.tgz", + "integrity": "sha512-uiVVfVlhCZLfUBqOCUuh8V3t+8lKTFJ6mgDoH99YFbuWYUUch8OHWQG70qg/I6m7IRIZLtHyPt3OCxYgI0R6Yw==", "dev": true }, "@firebase/messaging": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.6.4.tgz", - "integrity": "sha512-QKoK5gskZ9cECOa5nnp2oXoP3vmVOyzrEj3x0vHu1HsZhCg6EgRiJ9yO4LeTwoVcwFKDMkuNNPJZ8USOy2fdtw==", + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.6.9.tgz", + "integrity": "sha512-MIkvpD56JX8NhcrWYI1DsgOUyEq/NpkdecqxeJx6IUK64W4GmJW7Msh3xGrvHpRetoErjM6OqKYzlJqEixL6wg==", "dev": true, "requires": { - "@firebase/component": "0.1.5", - "@firebase/installations": "0.4.2", - "@firebase/messaging-types": "0.4.2", - "@firebase/util": "0.2.40", + "@firebase/component": "0.1.7", + "@firebase/installations": "0.4.5", + "@firebase/messaging-types": "0.4.4", + "@firebase/util": "0.2.42", "idb": "3.0.2", - "tslib": "1.10.0" + "tslib": "1.11.1" }, "dependencies": { "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", "dev": true } } }, "@firebase/messaging-types": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.4.2.tgz", - "integrity": "sha512-Yb6pJ31tyDWP+4/8uXUO4cNP4oBdfauNuPT0SVqQ92SKlp4n2lHtH68IHa1outxJj6CFzFgj/Z2YZMviUWCM0Q==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.4.4.tgz", + "integrity": "sha512-JGtkr+1A1Dw7+yCqQigqBfGKtq0gTCruFScBD4MVjqZHiqGIYpnQisWnpGbkzPR6aOt6iQxgwxUhHG1ulUQGeg==", "dev": true }, "@firebase/performance": { - "version": "0.2.32", - "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.2.32.tgz", - "integrity": "sha512-e18mVGU7Er13nG1IT/BrONxvoKhd2MK7IUWMvxGv1NDQ0gs/AiK1qKzCRI1oBtyna5b/I+pYI8UvaffWRQXKBw==", + "version": "0.2.35", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.2.35.tgz", + "integrity": "sha512-FMHjxfy/8E1Y9aurLS0sEpPII2xsNiYAantFS95IwXvVAa2cpnZFCzOn/XUT2ytfuxgUo2Ly4gOvplcI07oE5w==", "dev": true, "requires": { - "@firebase/component": "0.1.5", - "@firebase/installations": "0.4.2", - "@firebase/logger": "0.1.35", - "@firebase/performance-types": "0.0.9", - "@firebase/util": "0.2.40", - "tslib": "1.10.0" + "@firebase/component": "0.1.7", + "@firebase/installations": "0.4.5", + "@firebase/logger": "0.1.37", + "@firebase/performance-types": "0.0.12", + "@firebase/util": "0.2.42", + "tslib": "1.11.1" }, "dependencies": { "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", "dev": true } } }, "@firebase/performance-types": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.0.9.tgz", - "integrity": "sha512-kOVFW2OY5qObjSrq3OczLuEIKGtnVw/R7qw/wTtgPbyQUhMp7o2tnfTcMWlKSEifgcJDEY3kMTda3fjAuXgzSw==", + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.0.12.tgz", + "integrity": "sha512-eIDF7CHetOE5sc+hCaUebEn/2Aiaju7UkgZDTl7lNQHz5fK9wJ/11HaE8WdnDr//ngS3lQAGC2RB4lAZeEWraA==", "dev": true }, "@firebase/polyfill": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@firebase/polyfill/-/polyfill-0.3.31.tgz", - "integrity": "sha512-7XItMz50tdba57tCOTCSH8REvHYbrTU7MBOksnNZ3td/J9W/RkCPcLVSSnFWNmn0Jv1aufpUevryX1J4DZ/oiw==", + "version": "0.3.32", + "resolved": "https://registry.npmjs.org/@firebase/polyfill/-/polyfill-0.3.32.tgz", + "integrity": "sha512-Q6n7s3YAKI1xpBUBKOoDqC2i4bTYEZ2BLDgwhkWF+aMi0pWrhODDrV50s/Cza1Z2quaWu3jCZ0Bg9TzG1+zGbg==", "dev": true, "requires": { - "core-js": "3.6.2", + "core-js": "3.6.4", "promise-polyfill": "8.1.3", "whatwg-fetch": "2.0.4" }, "dependencies": { "core-js": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.2.tgz", - "integrity": "sha512-hIE5dXkRzRvnZ5vhkRfQxUvDxQZmD9oueA08jDYRBKJHx+VIl/Pne/e0A4x9LObEEthC/TqiZybUoNM4tRgnKg==", + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==", "dev": true }, "whatwg-fetch": { @@ -360,80 +360,80 @@ } }, "@firebase/remote-config": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.1.13.tgz", - "integrity": "sha512-VpqUZ5NRbWtoWkKsro2cqGRQh5eqTD6Fw/qETUmYk2jp1vdkyIzn8Mb4yAdejwC6W/fuib3R2XzIjHeHtAJNRA==", + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.1.16.tgz", + "integrity": "sha512-Fo6fPJ/e5MsU8AZtFcS/5JMvU+wcb4Mf0SSIclhwWaX8JKePYF0TG92pbGoSs9RdsdxxlzXIQjtcvmi40eMN6Q==", "dev": true, "requires": { - "@firebase/component": "0.1.5", - "@firebase/installations": "0.4.2", - "@firebase/logger": "0.1.35", - "@firebase/remote-config-types": "0.1.6", - "@firebase/util": "0.2.40", - "tslib": "1.10.0" + "@firebase/component": "0.1.7", + "@firebase/installations": "0.4.5", + "@firebase/logger": "0.1.37", + "@firebase/remote-config-types": "0.1.8", + "@firebase/util": "0.2.42", + "tslib": "1.11.1" }, "dependencies": { "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", "dev": true } } }, "@firebase/remote-config-types": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.1.6.tgz", - "integrity": "sha512-t8Q3GOq7mGqy8SwgnMHQZYqADEc4fj3rdA8U+ZFPWEISMrGQQfaCm/5QaS7HFmSoKaJx+/tSBBKVjVqvSoOH6Q==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.1.8.tgz", + "integrity": "sha512-K12IBHO7OD4gCW0FEqZL9zMqVAfS4+joC4YIn3bHezZfu3RL+Bw1wCb0cAD7RfDPcQxWJjxOHpce4YhuqSxPFA==", "dev": true }, "@firebase/storage": { - "version": "0.3.26", - "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.3.26.tgz", - "integrity": "sha512-oSzQsDVUL5YuL7+7bkoA111rID0y1OZpAWKZlKtLktTqWN8GUloQIqArdwg1POt0wV+B1hfBytJuYZlI17hGgg==", + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.3.29.tgz", + "integrity": "sha512-vFNq282bbVXytSDUvyD2NYOodtB9fXmKUNgWNQxUAcXGBMJXq1NSLrmfetAS+kPTs2ejUS/VUdW7BlSfYyAF3Q==", "dev": true, "requires": { - "@firebase/component": "0.1.5", - "@firebase/storage-types": "0.3.9", - "@firebase/util": "0.2.40", - "tslib": "1.10.0" + "@firebase/component": "0.1.7", + "@firebase/storage-types": "0.3.11", + "@firebase/util": "0.2.42", + "tslib": "1.11.1" }, "dependencies": { "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", "dev": true } } }, "@firebase/storage-types": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.3.9.tgz", - "integrity": "sha512-az7GZ9zpLAh8vvbOKGwsRy/pB7bI654PzGPvAdK4E35NDBjLMTVBn8yqeDZd/5OjY3dgYit0twIDo1ljx1O6QA==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.3.11.tgz", + "integrity": "sha512-EMOo5aeiJIa8eQ/VqjIa/DYlDcEJX1V84FOxmLfNWZIlmCSvcqx9E9mcNlOnoUB4iePqQjTMQRtKlIBvvEVhVg==", "dev": true }, "@firebase/util": { - "version": "0.2.40", - "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.2.40.tgz", - "integrity": "sha512-ViuceN8F6eeN/8QaA7FbOX7KlypQAFrXHBnTEicxwED4n1SdgGFapaS/ggScq1MMwq0RjGinNbigtc1Rqy8yVA==", + "version": "0.2.42", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.2.42.tgz", + "integrity": "sha512-ihFavcy7OdSMwZySidRSi58RkiqVVcmVAVy2J5VSKWaCQcBL8+4+H0ytmmXplxKCaQAsyqj1XhJx+MaCJyXknQ==", "dev": true, "requires": { - "tslib": "1.10.0" + "tslib": "1.11.1" }, "dependencies": { "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", "dev": true } } }, "@firebase/webchannel-wrapper": { - "version": "0.2.35", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.2.35.tgz", - "integrity": "sha512-7njiGBbFW0HCnuKNEJLcQt9EjfOzG8EJiXlFJwA3XfgiFxPVHmXrcF4d5yold2wfiwCwrXpeNTGZ854oRr6Hcw==", + "version": "0.2.37", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.2.37.tgz", + "integrity": "sha512-jreLH4/jlrULywKPQKMCjNGKY/ynZPZxiM8T6vD+JxpjOBqtXWcuBEzOktcQ5lWs3BlRi77NHOTLs23hkFXZiQ==", "dev": true }, "@grpc/proto-loader": { @@ -712,14 +712,13 @@ } }, "@openzeppelin/cli": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@openzeppelin/cli/-/cli-2.7.1.tgz", - "integrity": "sha512-tSmWE9QLzjZCZrdhUKKORwmCCz77IPIEXkeRBseEHmQNnk3Xy3yhyTFnwgDgH7oHAGySGPVzG66FiM28SFtcTg==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/cli/-/cli-2.7.2.tgz", + "integrity": "sha512-YvY7GluoXdT5Vbotv0Zyo/2M7hHM5/BvDyNA5LJt8J2qsXmeBTGLB+/YmCnb+vS4E1ANS/cMioCHwOid+qaqbA==", "dev": true, "requires": { "@openzeppelin/fuzzy-solidity-import-parser": "^0.1.2", - "@openzeppelin/test-environment": "^0.1.0", - "@openzeppelin/upgrades": "2.7.1", + "@openzeppelin/upgrades": "^2.7.2", "@types/fs-extra": "^7.0.0", "@types/npm": "^2.0.29", "@types/semver": "^5.5.0", @@ -798,9 +797,9 @@ }, "dependencies": { "ajv": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", - "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", + "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -867,9 +866,9 @@ }, "dependencies": { "@types/node": { - "version": "10.17.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.15.tgz", - "integrity": "sha512-daFGV9GSs6USfPgxceDA8nlSe48XrVCJfDeYm7eokxq/ye7iuOH87hKXgMtEAVLFapkczbZsx868PMDT1Y0a6A==", + "version": "10.17.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.17.tgz", + "integrity": "sha512-gpNnRnZP3VWzzj5k3qrpRC6Rk3H/uclhAVo1aIvwzK5p5cOrs9yEyQ8H/HBsBY0u5rrWxXEiVPQ0dEB6pkjE8Q==", "dev": true }, "elliptic": { @@ -1016,9 +1015,9 @@ }, "dependencies": { "@types/node": { - "version": "10.17.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.15.tgz", - "integrity": "sha512-daFGV9GSs6USfPgxceDA8nlSe48XrVCJfDeYm7eokxq/ye7iuOH87hKXgMtEAVLFapkczbZsx868PMDT1Y0a6A==", + "version": "10.17.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.17.tgz", + "integrity": "sha512-gpNnRnZP3VWzzj5k3qrpRC6Rk3H/uclhAVo1aIvwzK5p5cOrs9yEyQ8H/HBsBY0u5rrWxXEiVPQ0dEB6pkjE8Q==", "dev": true } } @@ -1891,9 +1890,9 @@ } }, "@openzeppelin/upgrades": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades/-/upgrades-2.7.1.tgz", - "integrity": "sha512-oTYCgfC9+gHqqKQRn6Q8YGzXu5J1ioeUfVTHTZQG0opzmQplVA5zkudUvgkgqzr219vfEW6kKJpFJhXqBgkQIw==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/upgrades/-/upgrades-2.7.2.tgz", + "integrity": "sha512-RU63TpSLNRjoeC6M4IeaEA3lI8UP6DdWF5L+gru9uExU+A/OvrhfepHfNd5lFQtkCB77oQ2I1wauE75K5a/ysg==", "dev": true, "requires": { "@types/cbor": "^2.0.0", @@ -2111,9 +2110,9 @@ }, "dependencies": { "@types/node": { - "version": "10.17.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.15.tgz", - "integrity": "sha512-daFGV9GSs6USfPgxceDA8nlSe48XrVCJfDeYm7eokxq/ye7iuOH87hKXgMtEAVLFapkczbZsx868PMDT1Y0a6A==", + "version": "10.17.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.17.tgz", + "integrity": "sha512-gpNnRnZP3VWzzj5k3qrpRC6Rk3H/uclhAVo1aIvwzK5p5cOrs9yEyQ8H/HBsBY0u5rrWxXEiVPQ0dEB6pkjE8Q==", "dev": true } } @@ -2223,9 +2222,9 @@ }, "dependencies": { "@types/node": { - "version": "10.17.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.15.tgz", - "integrity": "sha512-daFGV9GSs6USfPgxceDA8nlSe48XrVCJfDeYm7eokxq/ye7iuOH87hKXgMtEAVLFapkczbZsx868PMDT1Y0a6A==", + "version": "10.17.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.17.tgz", + "integrity": "sha512-gpNnRnZP3VWzzj5k3qrpRC6Rk3H/uclhAVo1aIvwzK5p5cOrs9yEyQ8H/HBsBY0u5rrWxXEiVPQ0dEB6pkjE8Q==", "dev": true }, "elliptic": { @@ -7518,25 +7517,25 @@ } }, "firebase": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-7.8.2.tgz", - "integrity": "sha512-qB/YopC6PVYTe2Q8hSwDD9CLdQHiMN1HUj/rxFxoICJR1VGkHP2KUvx2gv990V7CwzXIruLWoz9MwCOHFj9D0w==", - "dev": true, - "requires": { - "@firebase/analytics": "0.2.13", - "@firebase/app": "0.5.4", - "@firebase/app-types": "0.5.1", - "@firebase/auth": "0.13.5", - "@firebase/database": "0.5.21", - "@firebase/firestore": "1.10.2", - "@firebase/functions": "0.4.32", - "@firebase/installations": "0.4.2", - "@firebase/messaging": "0.6.4", - "@firebase/performance": "0.2.32", - "@firebase/polyfill": "0.3.31", - "@firebase/remote-config": "0.1.13", - "@firebase/storage": "0.3.26", - "@firebase/util": "0.2.40" + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-7.11.0.tgz", + "integrity": "sha512-8grsK7aSu1WmaVzxkueOylqZJM7Gf2S4OZO5gQRYwvPnmCsnjfKkSbPrxlEt5znyKuAOgud0ECUXFpj/e0OBtg==", + "dev": true, + "requires": { + "@firebase/analytics": "0.2.17", + "@firebase/app": "0.5.6", + "@firebase/app-types": "0.5.3", + "@firebase/auth": "0.14.0", + "@firebase/database": "0.5.23", + "@firebase/firestore": "1.12.1", + "@firebase/functions": "0.4.37", + "@firebase/installations": "0.4.5", + "@firebase/messaging": "0.6.9", + "@firebase/performance": "0.2.35", + "@firebase/polyfill": "0.3.32", + "@firebase/remote-config": "0.1.16", + "@firebase/storage": "0.3.29", + "@firebase/util": "0.2.42" } }, "flat": { @@ -32815,9 +32814,9 @@ "dev": true }, "protobufjs": { - "version": "6.8.8", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", - "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", + "version": "6.8.9", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.9.tgz", + "integrity": "sha512-j2JlRdUeL/f4Z6x4aU4gj9I2LECglC+5qR2TrWb193Tla1qfdaNQTZ8I27Pt7K0Ajmvjjpft7O3KWTGciz4gpw==", "dev": true, "requires": { "@protobufjs/aspromise": "^1.1.2", @@ -32836,9 +32835,9 @@ }, "dependencies": { "@types/node": { - "version": "10.17.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.15.tgz", - "integrity": "sha512-daFGV9GSs6USfPgxceDA8nlSe48XrVCJfDeYm7eokxq/ye7iuOH87hKXgMtEAVLFapkczbZsx868PMDT1Y0a6A==", + "version": "10.17.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.17.tgz", + "integrity": "sha512-gpNnRnZP3VWzzj5k3qrpRC6Rk3H/uclhAVo1aIvwzK5p5cOrs9yEyQ8H/HBsBY0u5rrWxXEiVPQ0dEB6pkjE8Q==", "dev": true } } @@ -33657,9 +33656,9 @@ } }, "simple-git": { - "version": "1.131.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.131.0.tgz", - "integrity": "sha512-z/art7YYtmPnnLItT/j+nKwJt6ap6nHZ4D8sYo9PdCKK/ug56SN6m/evfxJk7uDV3e9JuCa8qIyDU2P3cxmiNQ==", + "version": "1.132.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.132.0.tgz", + "integrity": "sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg==", "dev": true, "requires": { "debug": "^4.0.1" @@ -35558,9 +35557,9 @@ }, "dependencies": { "@types/node": { - "version": "10.17.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.15.tgz", - "integrity": "sha512-daFGV9GSs6USfPgxceDA8nlSe48XrVCJfDeYm7eokxq/ye7iuOH87hKXgMtEAVLFapkczbZsx868PMDT1Y0a6A==", + "version": "10.17.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.17.tgz", + "integrity": "sha512-gpNnRnZP3VWzzj5k3qrpRC6Rk3H/uclhAVo1aIvwzK5p5cOrs9yEyQ8H/HBsBY0u5rrWxXEiVPQ0dEB6pkjE8Q==", "dev": true }, "elliptic": { @@ -35630,9 +35629,9 @@ }, "dependencies": { "@types/node": { - "version": "10.17.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.15.tgz", - "integrity": "sha512-daFGV9GSs6USfPgxceDA8nlSe48XrVCJfDeYm7eokxq/ye7iuOH87hKXgMtEAVLFapkczbZsx868PMDT1Y0a6A==", + "version": "10.17.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.17.tgz", + "integrity": "sha512-gpNnRnZP3VWzzj5k3qrpRC6Rk3H/uclhAVo1aIvwzK5p5cOrs9yEyQ8H/HBsBY0u5rrWxXEiVPQ0dEB6pkjE8Q==", "dev": true } } diff --git a/package.json b/package.json index 0248dc562a0..4c98b0e33da 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ }, "homepage": "https://openzeppelin.com/contracts/", "devDependencies": { - "@openzeppelin/cli": "^2.7.1", + "@openzeppelin/cli": "^2.7.2", "@openzeppelin/docs-utils": "^0.1.0", "@openzeppelin/gsn-helpers": "^0.2.3", "@openzeppelin/gsn-provider": "^0.1.10",