diff --git a/packages/concordia-app/package.json b/packages/concordia-app/package.json index 7ed10de..f2bcbf9 100644 --- a/packages/concordia-app/package.json +++ b/packages/concordia-app/package.json @@ -26,15 +26,14 @@ "dependencies": { "@ezerous/breeze": "~0.4.0", "@ezerous/drizzle": "~0.4.0", + "@ezerous/eth-identity-provider": "^0.1.0", "@reduxjs/toolkit": "~1.4.0", "@welldone-software/why-did-you-render": "^6.0.0-rc.1", "concordia-contracts": "~0.1.0", "i18next": "^19.8.3", "i18next-browser-languagedetector": "^6.0.1", "i18next-http-backend": "^1.0.21", - "level": "~6.0.1", "lodash": "^4.17.20", - "orbit-db-identity-provider": "~0.3.1", "prop-types": "~15.7.2", "react": "~16.13.1", "react-dom": "~16.13.1", diff --git a/packages/concordia-app/src/options/breezeOptions.js b/packages/concordia-app/src/options/breezeOptions.js index 3dee844..8a0e894 100644 --- a/packages/concordia-app/src/options/breezeOptions.js +++ b/packages/concordia-app/src/options/breezeOptions.js @@ -1,4 +1,4 @@ -import EthereumIdentityProvider from '../orbit/ΕthereumIdentityProvider'; +import { EthereumContractIdentityProvider } from '@ezerous/eth-identity-provider'; const breezeOptions = { ipfs: { @@ -23,7 +23,7 @@ const breezeOptions = { }, }, orbit: { - identityProvider: EthereumIdentityProvider, + identityProvider: EthereumContractIdentityProvider, databases: [ { address: 'topics', diff --git a/packages/concordia-app/src/orbit/levelUtils.js b/packages/concordia-app/src/orbit/levelUtils.js deleted file mode 100644 index 344fde3..0000000 --- a/packages/concordia-app/src/orbit/levelUtils.js +++ /dev/null @@ -1,23 +0,0 @@ -import level from 'level'; - -/* Used in development only to store the identity.signatures.publicKey so developers don't have to -repeatedly sign theOrbitDB creation transaction in MetaMask when React development server reloads -the app */ -const concordiaDB = level('./concordia/identities'); - -async function storeIdentitySignaturePubKey(key, signaturePubKey) { - await concordiaDB.put(key, signaturePubKey); -} - -// If it exists, it returns the identity.signatures.publicKey for the given key (key is the -// concatenation of identity.publicKey + identity.signatures.id) -async function getIdentitySignaturePubKey(key) { - try { - return await concordiaDB.get(key); - } catch (err) { - if (err && err.notFound) return null; // Not found - throw err; - } -} - -export { storeIdentitySignaturePubKey, getIdentitySignaturePubKey }; diff --git a/packages/concordia-app/src/orbit/ΕthereumIdentityProvider.js b/packages/concordia-app/src/orbit/ΕthereumIdentityProvider.js deleted file mode 100644 index 96fffac..0000000 --- a/packages/concordia-app/src/orbit/ΕthereumIdentityProvider.js +++ /dev/null @@ -1,136 +0,0 @@ -/* eslint-disable no-console */ -/* eslint-disable no-return-await */ -import IdentityProvider from 'orbit-db-identity-provider'; -import { getIdentitySignaturePubKey, storeIdentitySignaturePubKey } from './levelUtils'; - -const LOGGING_PREFIX = 'EthereumIdentityProvider: '; - -class EthereumIdentityProvider extends IdentityProvider { - constructor(options = {}) { - if (!EthereumIdentityProvider.web3) { - throw new Error(`${LOGGING_PREFIX}Couldn't create identity, because web3 wasn't set. ` - + 'Please use setWeb3(web3) first!'); - } - - if (!EthereumIdentityProvider.contractAddress) { - throw new Error(`${LOGGING_PREFIX}Couldn't create identity, because contractAddress wasn't set. ` - + 'Please use setContractAddress(contractAddress) first!'); - } - - super(options); - - // Orbit's Identity Id (user's Ethereum address) - Optional (will be grabbed later if omitted) - const { id } = options; - if (id) { - const { userAddress, contractAddress } = EthereumIdentityProvider.splitId(id); - if (EthereumIdentityProvider.web3.utils.isAddress(userAddress) - && EthereumIdentityProvider.contractAddress === contractAddress) { - this.id = id; - this.userAddress = userAddress; - } else throw new Error(`${LOGGING_PREFIX}Couldn't create identity, because an invalid id was supplied.`); - } - } - - static get type() { return 'ethereum'; } - - async getId() { - // Id wasn't in the constructor, grab it now - if (!this.id) { - const accounts = await EthereumIdentityProvider.web3.eth.getAccounts(); - if (!accounts[0]) { - throw new Error(`${LOGGING_PREFIX}Couldn't create identity, because no web3 accounts were found ( - locked Metamask?).`); - } - [this.userAddress] = accounts; - this.id = this.userAddress + EthereumIdentityProvider.contractAddress; - } - return this.id; - } - - async signIdentity(data) { - if (process.env.NODE_ENV === 'development') { // Don't sign repeatedly while in development - console.debug(`${LOGGING_PREFIX}Attempting to find stored Orbit identity data...`); - const signaturePubKey = await getIdentitySignaturePubKey(data); - if (signaturePubKey) { - const identityInfo = { - userAddress: this.userAddress, - pubKeySignId: data, - signaturePubKey, - }; - if (await EthereumIdentityProvider.verifyIdentityInfo(identityInfo)) { - console.debug(`${LOGGING_PREFIX}Found and verified stored Orbit identity data!`); - return signaturePubKey; - } - console.debug(`${LOGGING_PREFIX}Stored Orbit identity data couldn't be verified.`); - } else console.debug(`${LOGGING_PREFIX}No stored Orbit identity data were found.`); - } - return await this.doSignIdentity(data); - } - - // eslint-disable-next-line consistent-return - async doSignIdentity(data) { - try { - const signaturePubKey = await EthereumIdentityProvider.web3.eth.personal.sign(data, this.userAddress, ''); - if (process.env.NODE_ENV === 'development') { - storeIdentitySignaturePubKey(data, signaturePubKey) - .then(() => { - console.debug(`${LOGGING_PREFIX}Successfully stored current Orbit identity data.`); - }) - .catch(() => { - console.warn(`${LOGGING_PREFIX}Couldn't store current Orbit identity data...`); - }); - } - return signaturePubKey; // Password not required for MetaMask - } catch (error) { - if (error.code && error.code === 4001) { - console.debug(`${LOGGING_PREFIX}User denied message signature.`); - return await this.doSignIdentity(data); - } - - console.error(`${LOGGING_PREFIX}Failed to sign data.`); - console.error(error); - } - } - - static async verifyIdentity(identity) { - const { userAddress } = EthereumIdentityProvider.splitId(identity.id); - - // Verify that identity was signed by the ID - return new Promise((resolve) => { - resolve(EthereumIdentityProvider.web3.eth.accounts.recover(identity.publicKey + identity.signatures.id, - identity.signatures.publicKey) === userAddress); - }); - } - - static async verifyIdentityInfo(identityInfo) { - // Verify that identity was signed by the ID - return new Promise((resolve) => { - resolve(EthereumIdentityProvider.web3.eth.accounts.recover(identityInfo.pubKeySignId, - identityInfo.signaturePubKey) === identityInfo.userAddress); - }); - } - - // Initialize by supplying a web3 object - static setWeb3(web3) { - EthereumIdentityProvider.web3 = web3; - } - - // Initialize by supplying a contract's address (to be used as a point of reference) - static setContractAddress(contractAddress) { - EthereumIdentityProvider.contractAddress = contractAddress; - } - - static splitId(id) { - const regex = /(0x.*)(0x.*)/g; - const match = regex.exec(id); - if (match && match.length === 3) { - return { userAddress: match[1], contractAddress: match[2] }; - } - throw new Error(`${LOGGING_PREFIX}Invalid id ${id}! Couldn't split it to userAddress, contractAddress.`); - } -} - -EthereumIdentityProvider.web3 = {}; -EthereumIdentityProvider.contractAddress = {}; - -export default EthereumIdentityProvider; diff --git a/packages/concordia-app/src/redux/sagas/orbitSaga.js b/packages/concordia-app/src/redux/sagas/orbitSaga.js index 7b58949..543a80a 100644 --- a/packages/concordia-app/src/redux/sagas/orbitSaga.js +++ b/packages/concordia-app/src/redux/sagas/orbitSaga.js @@ -6,11 +6,11 @@ import { breezeActions } from '@ezerous/breeze'; import { drizzleActions } from '@ezerous/drizzle'; import { forumContract } from 'concordia-contracts'; -import EthereumIdentityProvider from '../../orbit/ΕthereumIdentityProvider'; +import { EthereumContractIdentityProvider } from '@ezerous/eth-identity-provider'; function* initOrbitDatabases(action) { const { account, breeze } = action; - yield put(breezeActions.orbit.orbitInit(breeze, account + EthereumIdentityProvider.contractAddress)); // same as breeze.initOrbit(account); + yield put(breezeActions.orbit.orbitInit(breeze, account + EthereumContractIdentityProvider.contractAddress)); // same as breeze.initOrbit(account); } function* orbitSaga() { @@ -24,8 +24,8 @@ function* orbitSaga() { const networkId = yield call([web3.eth.net, web3.eth.net.getId]); const contractAddress = forumContract.networks[networkId].address; - EthereumIdentityProvider.setContractAddress(contractAddress); - EthereumIdentityProvider.setWeb3(web3); + EthereumContractIdentityProvider.setContractAddress(contractAddress); + EthereumContractIdentityProvider.setWeb3(web3); yield initOrbitDatabases({ breeze: res[1].breeze, account: res[2].accounts[0] }); } diff --git a/packages/concordia-app/src/redux/sagas/peerDbReplicationSaga.js b/packages/concordia-app/src/redux/sagas/peerDbReplicationSaga.js index f07fa7d..dd5b70c 100644 --- a/packages/concordia-app/src/redux/sagas/peerDbReplicationSaga.js +++ b/packages/concordia-app/src/redux/sagas/peerDbReplicationSaga.js @@ -7,7 +7,7 @@ import { ORBIT_DB_REPLICATED, ORBIT_DB_WRITE, } from '@ezerous/breeze/src/orbit/orbitActions'; -import determineKVAddress from '../../orbit/orbitUtils'; +import determineKVAddress from '../../utils/orbitUtils'; import { FETCH_USER_DATABASE, UPDATE_ORBIT_DATA } from '../actions/peerDbReplicationActions'; function* fetchUserDb({ orbit, userAddress }) { diff --git a/packages/concordia-app/src/orbit/orbitUtils.js b/packages/concordia-app/src/utils/orbitUtils.js similarity index 80% rename from packages/concordia-app/src/orbit/orbitUtils.js rename to packages/concordia-app/src/utils/orbitUtils.js index 1460113..ae6117e 100644 --- a/packages/concordia-app/src/orbit/orbitUtils.js +++ b/packages/concordia-app/src/utils/orbitUtils.js @@ -1,5 +1,5 @@ // https://github.com/orbitdb/orbit-db/blob/master/GUIDE.md#address -import EthereumIdentityProvider from './ΕthereumIdentityProvider'; +import { EthereumContractIdentityProvider } from '@ezerous/eth-identity-provider'; async function determineDBAddress({ orbit, dbName, type, identityId, @@ -12,7 +12,7 @@ async function determineDBAddress({ async function determineKVAddress({ orbit, dbName, userAddress }) { return determineDBAddress({ - orbit, dbName, type: 'keyvalue', identityId: userAddress + EthereumIdentityProvider.contractAddress, + orbit, dbName, type: 'keyvalue', identityId: userAddress + EthereumContractIdentityProvider.contractAddress, }); } diff --git a/yarn.lock b/yarn.lock index 1d11a7b..af511d6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1547,6 +1547,14 @@ redux-saga "~1.1.3" web3 "~1.3.0" +"@ezerous/eth-identity-provider@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@ezerous/eth-identity-provider/-/eth-identity-provider-0.1.0.tgz#061bdffe9835dd3a9424799fe36e609e57cee162" + integrity sha512-2RwxzMGdimvxoqzpPJJCpzX3kaDzUn7reJOOlclKNtpTOp8X8RK1rooUDRZDObo6I5mdntoYyL8gEXV2ypzJIQ== + dependencies: + level "~6.0.1" + orbit-db-identity-provider "~0.3.1" + "@fluentui/react-component-event-listener@~0.51.0": version "0.51.2" resolved "https://registry.yarnpkg.com/@fluentui/react-component-event-listener/-/react-component-event-listener-0.51.2.tgz#bb403c96acfa9fb4ea338f3f2bf66e672085a4c7" @@ -1660,9 +1668,9 @@ integrity sha512-WSrlgpvEqgPWkI18kkGELEZfXr0bYLtr16iIN4Krh9sRnzBZN6nnWxHFxtsnP684wueEySBbXPDg/WfA9xJdBQ== "@hapi/hapi@^20.0.0": - version "20.0.1" - resolved "https://registry.yarnpkg.com/@hapi/hapi/-/hapi-20.0.1.tgz#005dd0414182090b4f60851207e38ac389cf844e" - integrity sha512-v8NapLf5vkKWIJoBCUBIOk6ZdH9vrxZco4GZbjdM3ROQBDl4eXwW3pySTBL7xWANYp3Nzdn+fiFWjDwdgsSoQg== + version "20.0.2" + resolved "https://registry.yarnpkg.com/@hapi/hapi/-/hapi-20.0.2.tgz#654315d2e1a25cf41d0f8cb6a306e82bc74710d1" + integrity sha512-F59cZOZhEXpOL+o7RT76M/QDUwSn3u+RBkB+9l2NqTPEA11+inaiEZ0Z2DrRoo9g5EzWVU/gygdP4uo5aXQNHg== dependencies: "@hapi/accept" "^5.0.1" "@hapi/ammo" "^5.0.1" @@ -2344,9 +2352,9 @@ "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.3.tgz#b8aaeba0a45caca7b56a5de9459872dde3727214" - integrity sha512-uCoznIPDmnickEi6D0v11SBpW0OuVqHJCa7syXqQHy5uktSCreIlt0iglsCnmvz8yCb38hGcWeseA8cWJSwv5Q== + version "7.4.0" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" + integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -2431,14 +2439,14 @@ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "14.14.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.6.tgz#146d3da57b3c636cc0d1769396ce1cfa8991147f" - integrity sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw== + version "14.14.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.7.tgz#8ea1e8f8eae2430cf440564b98c6dfce1ec5945d" + integrity sha512-Zw1vhUSQZYw+7u5dAwNbIA9TuTotpzY/OF7sJM9FqPOF3SPjKnxrjoTktXDZgUjybf4cWVBP7O8wvKdSaGHweg== "@types/node@^12.12.6": - version "12.19.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.3.tgz#a6e252973214079155f749e8bef99cc80af182fa" - integrity sha512-8Jduo8wvvwDzEVJCOvS/G6sgilOLvvhn1eMmK3TW8/T217O7u1jdrK6ImKLv80tVryaPSVeKu6sjDEiFjd4/eg== + version "12.19.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.19.4.tgz#cdfbb62e26c7435ed9aab9c941393cc3598e9b46" + integrity sha512-o3oj1bETk8kBwzz1WlO6JWL/AfAA3Vm6J1B3C9CsdxHYp7XgPiH7OEXPUbZTndHlRaIElrANkQfe6ZmfJb3H2w== "@types/node@^13.7.0": version "13.13.30" @@ -3451,9 +3459,9 @@ base64-arraybuffer@0.1.5: integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= base64-js@^1.0.2, base64-js@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== base64id@2.0.0: version "2.0.0" @@ -3592,7 +3600,7 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== -bn.js@^5.1.1: +bn.js@^5.0.0, bn.js@^5.1.1: version "5.1.3" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== @@ -3752,11 +3760,11 @@ browserify-des@^1.0.0: safe-buffer "^5.1.2" browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== dependencies: - bn.js "^4.1.0" + bn.js "^5.0.0" randombytes "^2.0.1" browserify-sign@^4.0.0: @@ -3792,14 +3800,15 @@ browserslist@4.10.0: pkg-up "^3.1.0" browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.14.6, browserslist@^4.6.2, browserslist@^4.6.4, browserslist@^4.9.1: - version "4.14.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.6.tgz#97702a9c212e0c6b6afefad913d3a1538e348457" - integrity sha512-zeFYcUo85ENhc/zxHbiIp0LGzzTrE2Pv2JhxvS7kpUb9Q9D38kUX6Bie7pGutJ/5iF5rOxE7CepAuWD56xJ33A== + version "4.14.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.7.tgz#c071c1b3622c1c2e790799a37bb09473a4351cb6" + integrity sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ== dependencies: - caniuse-lite "^1.0.30001154" - electron-to-chromium "^1.3.585" + caniuse-lite "^1.0.30001157" + colorette "^1.2.1" + electron-to-chromium "^1.3.591" escalade "^3.1.1" - node-releases "^1.1.65" + node-releases "^1.1.66" bs58@^4.0.0, bs58@^4.0.1: version "4.0.1" @@ -3871,6 +3880,14 @@ buffer@^5.0.5, buffer@^5.4.3, buffer@^5.5.0, buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" +buffer@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.2.tgz#ca9ab87dffd0e864977f541f09844f06a60a8acd" + integrity sha512-XeXCUm+F7uY7fIzq4pKy+BLbZk4SgYS5xwlZOFYD3UEcAD+PwOoTaFr/SaXvhR1yRa8SKyPSZ7LNX4N65w7h8A== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + bufferutil@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.2.tgz#79f68631910f6b993d870fc77dc0a2894eb96cd5" @@ -4046,10 +4063,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001154: - version "1.0.30001156" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001156.tgz#75c20937b6012fe2b02ab58b30d475bf0718de97" - integrity sha512-z7qztybA2eFZTB6Z3yvaQBIoJpQtsewRD74adw2UbRWwsRq3jIPvgrQGawBMbfafekQaD21FWuXNcywtTDGGCw== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001157: + version "1.0.30001157" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001157.tgz#2d11aaeb239b340bc1aa730eca18a37fdb07a9ab" + integrity sha512-gOerH9Wz2IRZ2ZPdMfBvyOi3cjaz4O4dgNwPGzx8EhqAs4+2IL/O+fJsbt+znSigujoZG8bVcIAUM/I/E5K3MA== capture-exit@^2.0.0: version "2.0.0" @@ -4323,9 +4340,9 @@ cliui@^6.0.0: wrap-ansi "^6.2.0" cliui@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.3.tgz#ef180f26c8d9bff3927ee52428bfec2090427981" - integrity sha512-Gj3QHTkVMPKqwP3f7B4KPkBZRMR9r4rfi5bXFpg1a+Svvj8l7q5CnkBkVQzfxT5DFSsGk2+PascOgL0JYkL2kw== + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.0" @@ -4880,9 +4897,9 @@ css-tree@1.0.0-alpha.37: source-map "^0.6.1" css-tree@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0.tgz#21993fa270d742642a90409a2c0cb3ac0298adf6" - integrity sha512-CdVYz/Yuqw0VdKhXPBIgi8DO3NicJVYZNWeX9XcIuSp9ZoFT5IcleVRW07O5rMjdcx1mb+MEJPknTTEW7DdsYw== + version "1.0.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.1.tgz#7726678dfe2a57993a018d9dce519bf1760e3b6d" + integrity sha512-WroX+2MvsYcRGP8QA0p+rxzOniT/zpAoQ/DTKDSJzh5T3IQKUkFHeIIfgIapm2uaP178GWY3Mime1qbk8GO/tA== dependencies: mdn-data "2.0.12" source-map "^0.6.1" @@ -5057,23 +5074,23 @@ data-urls@^1.0.0, data-urls@^1.1.0: whatwg-url "^7.0.0" datastore-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/datastore-core/-/datastore-core-2.0.0.tgz#49e3c96cdfc4729fcd5c92d64b3b614429cb4472" - integrity sha512-E6SS3GEZNMCRZScWO98qQ14MIb7+3MLsJtcgla/ULCjfnhThsUE21HN+wT0+QLoYrKR54puWy/3XKp5N+5+zyA== + version "2.0.1" + resolved "https://registry.yarnpkg.com/datastore-core/-/datastore-core-2.0.1.tgz#604065d0d2f3128d33498da3c019489375ea41a1" + integrity sha512-er9DVcug5aM/qJFaG7pFmYah1f5XvUsHZ5nf9+MOFUKB3pCLlQIrClSu+Nl9hfROS9yiou6i5dFZu9PL9IQ+gQ== dependencies: debug "^4.1.1" interface-datastore "^2.0.0" - ipfs-utils "^2.3.1" + ipfs-utils "^4.0.1" datastore-fs@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/datastore-fs/-/datastore-fs-2.0.1.tgz#3ccb036fbdb3d2bc16d7a3ff4f24296b8ea0f38a" - integrity sha512-W0qOEJDHVmzSfCXMBcgnHI7n0SROQ7vpD24v9AicVWE/DPju4CUWl/1NHSQO3RR3ooaFdG31c1J2OjDKJO6+Fg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/datastore-fs/-/datastore-fs-2.0.2.tgz#69d708024bbd1b12bff0d3c3ef0675852c2d7c4a" + integrity sha512-OA1jKopZy5fMMIJNASRRJoj36AgD/v1TIp843o+3B7x4ffSiUArHUzbLRIBchD6VGLklz/3i4mtZeIaALsh/ZQ== dependencies: datastore-core "^2.0.0" fast-write-atomic "^0.2.0" interface-datastore "^2.0.0" - it-glob "0.0.8" + it-glob "0.0.10" mkdirp "^1.0.4" datastore-level@^2.0.0: @@ -5371,9 +5388,9 @@ dns-equal@^1.0.0: integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= dns-over-http-resolver@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/dns-over-http-resolver/-/dns-over-http-resolver-1.1.0.tgz#9b49d3ec30ea439729864d88c77e180e8892367d" - integrity sha512-0ltD/8BLqLfZMiTaudwj/DJQK/1RmXBv0SGHyhxtuOVKXw5hqlPVFQI5zOU+FIOlM2JBOfpRgH9BlAO8MN57vQ== + version "1.2.0" + resolved "https://registry.yarnpkg.com/dns-over-http-resolver/-/dns-over-http-resolver-1.2.0.tgz#1f9c808c88810b9ffe5c4a6ece449764e9658002" + integrity sha512-LJ1sEbQgwY+qmL6z3kNIKi0vHA9nSUdZb8vf3G6z43ZVIF6WhhNHXztLMOOvaMIvtCsCZBjAie11MtUD3+H0YA== dependencies: debug "^4.2.0" native-fetch "^2.0.1" @@ -5563,10 +5580,10 @@ ejs@^3.1.5: dependencies: jake "^10.6.1" -electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.585: - version "1.3.591" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.591.tgz#a18892bf1acb93f7b6e4da402705d564bc235017" - integrity sha512-ol/0WzjL4NS4Kqy9VD6xXQON91xIihDT36sYCew/G/bnd1v0/4D+kahp26JauQhgFUjrdva3kRSo7URcUmQ+qw== +electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.591: + version "1.3.595" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.595.tgz#e8a9e7c6919963419f892ea981d7b3438ccb834d" + integrity sha512-JpaBIhdBkF9FLG7x06ONfe0f5bxPrxRcq0X+Sc8vsCt+OPWIzxOD+qM71NEHLGbDfN9Q6hbtHRv4/dnvcOxo6g== elliptic@6.5.3, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3: version "6.5.3" @@ -7735,7 +7752,7 @@ idna-uts46-hx@^2.3.1: dependencies: punycode "2.1.0" -ieee754@^1.1.13, ieee754@^1.1.4: +ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -7936,13 +7953,13 @@ inquirer@^7.0.0: through "^2.3.6" interface-datastore@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/interface-datastore/-/interface-datastore-2.0.0.tgz#a0c2de1df9e42553e4723428c02242d9c47a2cc9" - integrity sha512-wOImix5uVEZWo+8zPSRMJ9nHbszZi3PhZ14KHLN7oRQjaYQtjtOpYj6n5EXTjDAfIQI8KN9vntHXxyAw1lcRIA== + version "2.0.1" + resolved "https://registry.yarnpkg.com/interface-datastore/-/interface-datastore-2.0.1.tgz#a2d6ed22ca00082ef6a11b1bffb25934a74d0bde" + integrity sha512-a4xHvVE8JCG8UItP0CCq+UJyBHZxhMp3esuFNjb3U9rP+tzKiG0HZXz8gIIwic6VbuE0Gui2whbJyJOFpMxhLg== dependencies: class-is "^1.1.0" err-code "^2.0.1" - ipfs-utils "^2.3.1" + ipfs-utils "^4.0.1" iso-random-stream "^1.1.1" it-all "^1.0.2" it-drain "^1.0.1" @@ -8459,7 +8476,7 @@ ipfs-unixfs@^2.0.3, ipfs-unixfs@^2.0.4: err-code "^2.0.0" protons "^2.0.0" -ipfs-utils@^2.2.0, ipfs-utils@^2.3.1: +ipfs-utils@^2.2.0: version "2.4.0" resolved "https://registry.yarnpkg.com/ipfs-utils/-/ipfs-utils-2.4.0.tgz#113db5f5625b1bf0411a6d6dbd5317dfff5287f9" integrity sha512-0RH8rMIEhrXyrbh87V8SQC6E6/5EJs+YionqZGAXnVoTzkpFhxC3x3FlsxwZ9s72yaieGP1Mx1tRYgfCFM/mJg== @@ -8496,20 +8513,20 @@ ipfs-utils@^3.0.0: node-fetch "^2.6.0" stream-to-it "^0.2.0" -ipfs-utils@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/ipfs-utils/-/ipfs-utils-4.0.0.tgz#f53b79294f500e43661cb6b2a9d7fa301d3fa3d3" - integrity sha512-HVeDUm4K4fYb44O1y2l4sNvDuzIB3+K6ZqYj45Bv3oqGmpBkm+ELq2Sssghpwk5b4ppsfOzSUoupMFdlg+Fk7w== +ipfs-utils@^4.0.0, ipfs-utils@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/ipfs-utils/-/ipfs-utils-4.0.1.tgz#8856ba3ee7251f0a8f08f2f33ca5b62a2691da4d" + integrity sha512-6mg+S1sbjj+Ff+uoHOhVeC4myfV2tb2sHcdYwfpJ4ZcBo9WfdxSMnWFLiC5bIqByyJuN/g5aWgz3ozjKDzND1Q== dependencies: "@achingbrain/electron-fetch" "^1.7.2" abort-controller "^3.0.0" any-signal "^2.1.0" - buffer "^5.6.0" + buffer "^6.0.1" err-code "^2.0.0" fs-extra "^9.0.1" is-electron "^2.2.0" - iso-url "^0.4.7" - it-glob "0.0.8" + iso-url "^1.0.0" + it-glob "0.0.10" merge-options "^2.0.0" nanoid "^3.1.3" native-abort-controller "0.0.3" @@ -8702,7 +8719,7 @@ is-color-stop@^1.0.0: rgb-regex "^1.0.1" rgba-regex "^1.0.0" -is-core-module@^2.0.0: +is-core-module@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.1.0.tgz#a4cc031d9b1aca63eecbd18a650e13cb4eeab946" integrity sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA== @@ -10441,9 +10458,9 @@ libp2p-floodsub@^0.23.1: uint8arrays "^1.1.0" libp2p-gossipsub@^0.6.1: - version "0.6.4" - resolved "https://registry.yarnpkg.com/libp2p-gossipsub/-/libp2p-gossipsub-0.6.4.tgz#7f4f2d525d7a997f02d3586126c47f65e46bfea4" - integrity sha512-zCS2Ze0ZgxcpL0jkkfV6SJM8sV3SfeOjfMH02G7OrVQYksFKXH//F3ZbksWjUeoAggdpP9+a66IWPBkj16CfCA== + version "0.6.6" + resolved "https://registry.yarnpkg.com/libp2p-gossipsub/-/libp2p-gossipsub-0.6.6.tgz#24f24fc26ff5f41303c662fbf48f6b37389b5735" + integrity sha512-oW/d7Y099RmxJ8KKWSlzuh3giuKb94d/VpKCxTqUJlsuA3SHjiOiKCO3oadrK5pkYgFMBXxYEnbZ84tft3MtRQ== dependencies: "@types/debug" "^4.1.5" debug "^4.1.1" @@ -11889,7 +11906,7 @@ node-pre-gyp@^0.13.0: semver "^5.3.0" tar "^4" -node-releases@^1.1.52, node-releases@^1.1.65: +node-releases@^1.1.52, node-releases@^1.1.66: version "1.1.66" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.66.tgz#609bd0dc069381015cd982300bae51ab4f1b1814" integrity sha512-JHEQ1iWPGK+38VLB2H9ef2otU4l8s3yAMt9Xf934r6+ojCYDMHPMqvCc9TnzfeFSP1QEOeU6YZEd3+De0LTCgg== @@ -14572,9 +14589,9 @@ regexpu-core@^4.7.1: unicode-match-property-value-ecmascript "^1.2.0" registry-auth-token@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.0.tgz#1d37dffda72bbecd0f581e4715540213a65eb7da" - integrity sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w== + version "4.2.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" + integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== dependencies: rc "^1.2.8" @@ -14756,11 +14773,11 @@ resolve@1.15.0: path-parse "^1.0.6" resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.2, resolve@^1.8.1: - version "1.18.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130" - integrity sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA== + version "1.19.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== dependencies: - is-core-module "^2.0.0" + is-core-module "^2.1.0" path-parse "^1.0.6" responselike@^1.0.2: @@ -16072,9 +16089,9 @@ tdigest@^0.1.1: bintrees "1.0.1" temp@^0.9.1: - version "0.9.2" - resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.2.tgz#06728e6e4b847e3ea5579c69c44bcc3ee6a47100" - integrity sha512-KLVd6CXeUYsqmI/LBWDLg3bFkdZPg0Xr/Gn79GUuPNiISzp6v/EKUaCOrxqeH1w/wVNmrljyDRgKxhZV9JzyJA== + version "0.9.4" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.4.tgz#cd20a8580cb63635d0e4e9d4bd989d44286e7620" + integrity sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA== dependencies: mkdirp "^0.5.1" rimraf "~2.6.2" @@ -16311,9 +16328,9 @@ tr46@^1.0.1: punycode "^2.1.0" truffle@~5.1.45: - version "5.1.52" - resolved "https://registry.yarnpkg.com/truffle/-/truffle-5.1.52.tgz#2fdae57d849e8d90d429a5252a4f8dbeb744f972" - integrity sha512-8KwPuHumZnfDBJOoUEdXo7BFr1a/RSh1CDI4AoHsIC+STajJnr7EvJdaniJRlA3S+6Hn12b3PY8Zaarba8VSvQ== + version "5.1.53" + resolved "https://registry.yarnpkg.com/truffle/-/truffle-5.1.53.tgz#3c984317d092f230d84b7d138d69dace106b5c2b" + integrity sha512-JXuuhPOsh/K9K9PJTcZDRy6ByxreOrchMIM1SgEVRi85MF6XWQSZwwV1kXF+JRtP938lfRmmpgWQb1MzFBY7qw== dependencies: app-module-path "^2.2.0" mocha "8.1.2" @@ -16352,9 +16369,9 @@ tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tsparticles@^1.18.10: - version "1.18.10" - resolved "https://registry.yarnpkg.com/tsparticles/-/tsparticles-1.18.10.tgz#d2e80af398ba90e2fdeb29dff9afdf65a7fb6be4" - integrity sha512-0OIGYwbXVJjd48GUdcTkv7Cn/BIoTOxUleeMhKqbFL5tV1CJevyhfXkMtGrY4FwRYxcNorxeaOE4dH1MO9AONQ== + version "1.18.11" + resolved "https://registry.yarnpkg.com/tsparticles/-/tsparticles-1.18.11.tgz#924d74cf40656727f5df047b53c4761463a4f6e7" + integrity sha512-F5czk8foRoywWHDYDT0eZhQwCXOHz7OGhJCsoybThTUIT+nwc1Eclltm/TMrnnxZZghF3Fo0VL8nN4inf+pQbA== optionalDependencies: pathseg "^1.2.0" @@ -16861,23 +16878,23 @@ warning@^4.0.2, warning@^4.0.3: dependencies: loose-envify "^1.0.0" -watchpack-chokidar2@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" - integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== dependencies: chokidar "^2.1.8" watchpack@^1.6.0: - version "1.7.4" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" - integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== dependencies: graceful-fs "^4.1.2" neo-async "^2.5.0" optionalDependencies: chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.0" + watchpack-chokidar2 "^2.0.1" wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" @@ -17592,9 +17609,9 @@ ws@^6.1.2, ws@^6.2.1: async-limiter "~1.0.0" ws@^7.1.2, ws@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" - integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== + version "7.4.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.0.tgz#a5dd76a24197940d4a8bb9e0e152bb4503764da7" + integrity sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ== ws@~6.1.0: version "6.1.4" @@ -17742,9 +17759,9 @@ yargs-parser@^18.1.2: decamelize "^1.2.0" yargs-parser@^20.2.2: - version "20.2.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.3.tgz#92419ba867b858c868acf8bae9bf74af0dd0ce26" - integrity sha512-emOFRT9WVHw03QSvN5qor9QQT9+sw5vwxfYweivSMHTcAXPefwVae2FjO7JJjj8hCE4CzPOPeFM83VwT29HCww== + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== yargs-unparser@1.6.1: version "1.6.1"