From e9ca71ef9d6b97ea7fd65cc980d260f88a88d27e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Mon, 5 Feb 2024 13:43:39 +0100 Subject: [PATCH 01/24] remove localhost from networks package --- packages/networks/src/networks/index.ts | 1 - packages/networks/src/networks/localhost.ts | 24 --------------------- 2 files changed, 25 deletions(-) delete mode 100644 packages/networks/src/networks/localhost.ts diff --git a/packages/networks/src/networks/index.ts b/packages/networks/src/networks/index.ts index 51f7e466866..3208f9d0dd4 100644 --- a/packages/networks/src/networks/index.ts +++ b/packages/networks/src/networks/index.ts @@ -1,4 +1,3 @@ -export * from './localhost' export * from './mainnet' export * from './gnosis' export * from './polygon' diff --git a/packages/networks/src/networks/localhost.ts b/packages/networks/src/networks/localhost.ts deleted file mode 100644 index 242302b7b3f..00000000000 --- a/packages/networks/src/networks/localhost.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { NetworkConfig } from '@unlock-protocol/types' - -// We use Partial for localhost as we don't have all the information -export const localhost: Partial = { - chain: 'localhost', - description: 'Localhost network.', - featured: false, - fullySubsidizedGas: true, - id: 31337, - isTestNetwork: true, - name: 'localhost', - nativeCurrency: { - coingecko: 'ethereum', - decimals: 18, - name: 'ETH', - symbol: 'ETH', - }, - provider: 'http://127.0.0.1:8545', - publicLockVersionToDeploy: 13, - publicProvider: 'http://127.0.0.1:8545', - subgraph: { - endpoint: 'http://localhost:8000/subgraphs/name/unlock-protocol/unlock', - }, -} From 20452b23a44f4558b3e0c7316f4e316028a8863d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Mon, 5 Feb 2024 13:48:18 +0100 Subject: [PATCH 02/24] remove localhost from keys in helpers --- packages/hardhat-helpers/src/networks.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/hardhat-helpers/src/networks.js b/packages/hardhat-helpers/src/networks.js index 1b6c587f628..601d510db8d 100644 --- a/packages/hardhat-helpers/src/networks.js +++ b/packages/hardhat-helpers/src/networks.js @@ -50,7 +50,7 @@ const hardhatNetworks = { } Object.keys(networks).forEach((key) => { - if (['default', 'networks', 'localhost'].indexOf(key) === -1) { + if (['default', 'networks'].indexOf(key) === -1) { hardhatNetworks[key] = { chainId: networks[key].id, name: networks[key].name, From 97f97d4b8ceb62254f1efe02b80af22b7a346089 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Tue, 6 Feb 2024 13:23:14 +0100 Subject: [PATCH 03/24] fix localhost network --- governance/scripts/deployments/index.js | 10 ++++--- governance/tasks/deploy.js | 39 ++++++++++--------------- packages/hardhat-helpers/src/unlock.js | 2 +- 3 files changed, 22 insertions(+), 29 deletions(-) diff --git a/governance/scripts/deployments/index.js b/governance/scripts/deployments/index.js index 499bf4b8950..72244c8c24d 100644 --- a/governance/scripts/deployments/index.js +++ b/governance/scripts/deployments/index.js @@ -2,7 +2,11 @@ const { ethers, run, upgrades, network } = require('hardhat') const { networks } = require('@unlock-protocol/networks') const createLock = require('../lock/create') -const { getUnlock, ADDRESS_ZERO } = require('@unlock-protocol/hardhat-helpers') +const { + getUnlock, + ADDRESS_ZERO, + getNetwork, +} = require('@unlock-protocol/hardhat-helpers') const log = (...message) => { // eslint-disable-next-line no-console @@ -26,8 +30,7 @@ async function main({ const [deployer, minter] = await ethers.getSigners() // fetch chain info - const { chainId } = await ethers.provider.getNetwork() - const networkName = networks[chainId].name + const { id: chainId, name: networkName, multisig } = await getNetwork() const isLocalNet = networkName === 'localhost' log( `Deploying contracts on ${networkName} with the account: ${deployer.address}` @@ -107,7 +110,6 @@ async function main({ } // Transfer ownership of Unlock + Proxy admin - const multisig = networks[chainId.toString()].multisig if (!owner && multisig) { owner = multisig if (owner) { diff --git a/governance/tasks/deploy.js b/governance/tasks/deploy.js index 1c9aa338896..c3cc48b96e2 100644 --- a/governance/tasks/deploy.js +++ b/governance/tasks/deploy.js @@ -34,30 +34,21 @@ task('deploy', 'Deploy the entire Unlock protocol') ) .addFlag('setTemplate', 'set the PublicLock instance in Unlock') .setAction( - async ( - { - unlockAddress, - unlockVersion, - publicLockVersion, - udtAddress, - publicLockAddress, - wethAddress, - oracleAddress, - premintAmount, - liquidity, - setTemplate, - estimatedGasForPurchase, - locksmithURI, - owner, - }, - { ethers } - ) => { - const { chainId } = await ethers.provider.getNetwork() - const networkName = networks[chainId].name - - // eslint-disable-next-line no-console - console.log(`Starting deployments on ${networkName}...`) - + async ({ + unlockAddress, + unlockVersion, + publicLockVersion, + udtAddress, + publicLockAddress, + wethAddress, + oracleAddress, + premintAmount, + liquidity, + setTemplate, + estimatedGasForPurchase, + locksmithURI, + owner, + }) => { // eslint-disable-next-line global-require const mainDeployer = require('../scripts/deployments') const { diff --git a/packages/hardhat-helpers/src/unlock.js b/packages/hardhat-helpers/src/unlock.js index d9f014bbfb8..7bdd11ba55b 100644 --- a/packages/hardhat-helpers/src/unlock.js +++ b/packages/hardhat-helpers/src/unlock.js @@ -30,7 +30,7 @@ export const getNetwork = async (chainId) => { if (!chainId) { ;({ chainId } = await ethers.provider.getNetwork()) } - return networks[chainId] + return networks[chainId] || { name: 'localhost', id: chainId } } export default { From 1de9ea00caa8c596676b6bbedcd023fab2713743 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Tue, 6 Feb 2024 13:24:51 +0100 Subject: [PATCH 04/24] trigger ci From 390253c6109652e8b980cd8aa6a96aec49de6047 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Mon, 12 Feb 2024 17:48:56 +0100 Subject: [PATCH 05/24] fix hardhat plugin tests --- .../hardhat-project/hardhat.config.ts | 3 +++ packages/hardhat-plugin/test/index.test.ts | 11 ++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/hardhat-plugin/test/fixture-projects/hardhat-project/hardhat.config.ts b/packages/hardhat-plugin/test/fixture-projects/hardhat-project/hardhat.config.ts index 7657c57730b..703918d9c94 100644 --- a/packages/hardhat-plugin/test/fixture-projects/hardhat-project/hardhat.config.ts +++ b/packages/hardhat-plugin/test/fixture-projects/hardhat-project/hardhat.config.ts @@ -23,6 +23,9 @@ const config: HardhatUserConfig = { endpoint: 'here goes a subgraph URI', }, }, + 1: { + unlockAddress: 'newAddress', + }, 12345: { name: 'New Network', id: 12345, diff --git a/packages/hardhat-plugin/test/index.test.ts b/packages/hardhat-plugin/test/index.test.ts index 4bb72e7b0e8..aaa8e9ef1a4 100644 --- a/packages/hardhat-plugin/test/index.test.ts +++ b/packages/hardhat-plugin/test/index.test.ts @@ -34,13 +34,18 @@ describe('Unlock Hardhat plugin', function () { assert.instanceOf(this.hre.unlock, Object) }) - it('should store networks info', function () { + it('should store and extend existing networks info', function () { + assert.isTrue(Object.keys(this.hre.unlock.networks).includes('1')) + assert.equal(this.hre.unlock.networks['1'].name, networks['1'].name) + assert.equal(this.hre.unlock.networks['1'].id, networks['1'].id) + assert.equal(this.hre.unlock.networks['1'].unlockAddress, 'newAddress') + }) + it('should store additional networks info', function () { assert.isTrue(Object.keys(this.hre.unlock.networks).includes('31337')) assert.equal( this.hre.unlock.networks['31337'].name, 'Custom Localhost Name' ) - assert.equal(this.hre.unlock.networks['31337'].id, networks['31337'].id) assert.equal( this.hre.unlock.networks['31337'].subgraph?.endpoint, 'here goes a subgraph URI' @@ -213,7 +218,7 @@ describe('HardhatConfig unlock extension', function () { assert.isTrue(Object.keys(this.hre.config).includes('unlock')) assert.deepEqual( Object.keys(this.hre.config.unlock).sort(), - [...Object.keys(networks), '12345'].sort() + [...Object.keys(networks), '12345', '31337'].sort() ) }) From 81a826a2d8b4ecd34fde3111260ae0c52f7ad34f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Mon, 18 Mar 2024 15:43:23 +0100 Subject: [PATCH 06/24] add script to create localhost file --- packages/networks/bin/localhost.js | 83 ++++++++++++++++++++++++++++++ packages/networks/package.json | 3 ++ 2 files changed, 86 insertions(+) create mode 100644 packages/networks/bin/localhost.js diff --git a/packages/networks/bin/localhost.js b/packages/networks/bin/localhost.js new file mode 100644 index 00000000000..73f74dc819c --- /dev/null +++ b/packages/networks/bin/localhost.js @@ -0,0 +1,83 @@ +import fs from 'fs-extra' +import path from 'path' + +// We use Partial for localhost as we don't have all the information +const defaultLocalhost = { + chain: 'localhost', + description: 'Localhost network.', + featured: false, + fullySubsidizedGas: true, + id: 31337, + isTestNetwork: true, + name: 'Localhost', + nativeCurrency: { + coingecko: 'ethereum', + decimals: 18, + name: 'ETH', + symbol: 'ETH', + }, + provider: 'http://127.0.0.1:8545', + publicLockVersionToDeploy: 13, + publicProvider: 'http://127.0.0.1:8545', + subgraph: { + endpoint: '', + }, +} + +const generateLocalhostNetworkFile = ({ + unlockAddress, + subgraphEnpoint = 'http://localhost:8000/subgraphs/name/testgraph', +}) => { + const localhost = { + ...defaultLocalhost, + subgraph: { + endpoint: subgraphEnpoint, + }, + unlockAddress, + } + + // log for debug purposes + console.log(localhost) + + // output to js file + const parsed = `import { NetworkConfig } from '@unlock-protocol/types' + +// We use Partial for localhost as we don't have all the information +export const localhost: Partial = ${JSON.stringify(localhost)} +export default localhost + ` + return parsed +} + +const run = async () => { + const [networkInfoPath, subgraphEnpoint] = process.argv.slice(2) + + const networkInfo = await fs.readJSON(networkInfoPath) + const { + localhost: { + Unlock: { address: unlockAddress }, + }, + } = networkInfo + + console.log(networkInfo) + + console.log(`Creating localhost file for unlockAddress ${unlockAddress}`) + + if (!unlockAddress) { + throw new Error('Missing unlockAddress arg') + } + + const fileContent = generateLocalhostNetworkFile({ + subgraphEnpoint, + unlockAddress, + }) + + const filePath = path.resolve('./src/networks/localhost.ts') + + await fs.writeFile(filePath, fileContent) +} +run() + .then(() => console.log('done')) + .catch((err) => { + throw err + }) diff --git a/packages/networks/package.json b/packages/networks/package.json index 887df4a7616..e88bbab2d3e 100644 --- a/packages/networks/package.json +++ b/packages/networks/package.json @@ -18,6 +18,7 @@ "build": "tsup src/index.ts --dts --format esm,cjs", "check-tokens": "tsx ./bin/check-tokens", "clean": "rm -rf ./dist", + "create-localhost": "tsx ./bin/localhost", "check": "tsx ./bin/keys", "prepublish": "yarn build", "doc": "node ./bin/doc.js", @@ -32,7 +33,9 @@ "@unlock-protocol/tsconfig": "workspace:^", "@unlock-protocol/types": "workspace:^", "eslint": "8.54.0", + "fs-extra": "11.2.0", "tsup": "8.0.2", + "typescript": "5.3.3" }, "files": [ From 06375718fe1887d28db31665fe246f4db45f9598 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Mon, 18 Mar 2024 15:59:16 +0100 Subject: [PATCH 07/24] generate localhost in integration tests --- scripts/integration-tests.sh | 16 +++++++++++++--- tests/bin/prepare.sh | 12 ++++++++++++ tests/bin/tests.sh | 16 ---------------- tests/package.json | 6 +++--- 4 files changed, 28 insertions(+), 22 deletions(-) create mode 100644 tests/bin/prepare.sh delete mode 100644 tests/bin/tests.sh diff --git a/scripts/integration-tests.sh b/scripts/integration-tests.sh index 5235697af28..ce0c9c0a8f0 100755 --- a/scripts/integration-tests.sh +++ b/scripts/integration-tests.sh @@ -3,11 +3,21 @@ set -e # First this script will deploy REPO_ROOT=`dirname "$0"`/.. -INTEGRATION_TESTS_FOLDER=$REPO_ROOT/tests -EXTRA_ARGS=$* + +# fetch compose config paths +BASE_DOCKER_FOLDER=$REPO_ROOT/docker +BASE_DOCKER_COMPOSE=$BASE_DOCKER_FOLDER/docker-compose.yml +DOCKER_COMPOSE_FILE=$BASE_DOCKER_FOLDER/docker-compose.integration.yml +COMPOSE_CONFIG="-f $BASE_DOCKER_COMPOSE -f $DOCKER_COMPOSE_FILE" # run Unlock Protocol stack sh -c "$REPO_ROOT/scripts/run-stack-dockerized.sh" +# Setting the right env var +export UNLOCK_ENV=test + # run the actual tests -sh $INTEGRATION_TESTS_FOLDER/bin/tests.sh \ No newline at end of file +echo "Running integration tests \n" +COMMAND="yarn workspace tests test --network docker" +docker-compose $COMPOSE_CONFIG build integration-tests +docker-compose $COMPOSE_CONFIG run -e UNLOCK_ENV=test -e CI=true $EXTRA_ARGS integration-tests bash -c "$COMMAND" diff --git a/tests/bin/prepare.sh b/tests/bin/prepare.sh new file mode 100644 index 00000000000..4ccfed5f775 --- /dev/null +++ b/tests/bin/prepare.sh @@ -0,0 +1,12 @@ +# this file is used to create a localhost network file + +# networks file path when running on CI +INFO_FILE_PATH=/home/unlock/networks.json + +# create localhost file in networks package +yarn workspace @unlock-protocol/networks create-localhost "$INFO_FILE_PATH" +yarn workspace @unlock-protocol/networks build + +# rebuild unlock-js to get latest networks package +yarn workspace @unlock-protocol/unlock-js build + diff --git a/tests/bin/tests.sh b/tests/bin/tests.sh deleted file mode 100644 index 5b12e86ce76..00000000000 --- a/tests/bin/tests.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash -REPO_ROOT=`dirname "$0"`/../.. - -# fetch compose config paths -BASE_DOCKER_FOLDER=$REPO_ROOT/docker -BASE_DOCKER_COMPOSE=$BASE_DOCKER_FOLDER/docker-compose.yml -DOCKER_COMPOSE_FILE=$BASE_DOCKER_FOLDER/docker-compose.integration.yml -COMPOSE_CONFIG="-f $BASE_DOCKER_COMPOSE -f $DOCKER_COMPOSE_FILE" - -# Setting the right env var -export UNLOCK_ENV=test - -echo "Running integration tests \n" -COMMAND="yarn workspace tests test --network docker" -docker-compose $COMPOSE_CONFIG build integration-tests -docker-compose $COMPOSE_CONFIG run -e UNLOCK_ENV=test -e CI=true $EXTRA_ARGS integration-tests bash -c "$COMMAND" diff --git a/tests/package.json b/tests/package.json index 6298724a5a8..4ffb977543d 100644 --- a/tests/package.json +++ b/tests/package.json @@ -4,9 +4,9 @@ "scripts": { "lint:fix": "yarn lint --fix", "lint": "eslint --resolve-plugins-relative-to ../eslint-config --ext .tsx,.ts,.js scripts/ test/", - "test": "yarn test:subgraph", - "test:subgraph": "hardhat test", - "ci": "hardhat test --network 0.0.0.0" + "test": "hardhat test", + "test:prepare": "sh prepare.sh", + "ci": "yarn test:prepare && yarn test --network 0.0.0.0" }, "dependencies": { "@apollo/client": "3.6.9", From 274beb9dd93681bd6ceeba91c87c7899c2e1d68a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Mon, 18 Mar 2024 16:08:56 +0100 Subject: [PATCH 08/24] mock localhost network file in locksmith tests --- locksmith/__tests__/fulfillment/dispatcher.test.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/locksmith/__tests__/fulfillment/dispatcher.test.ts b/locksmith/__tests__/fulfillment/dispatcher.test.ts index 5cfc9ed8b16..4ffd5791644 100644 --- a/locksmith/__tests__/fulfillment/dispatcher.test.ts +++ b/locksmith/__tests__/fulfillment/dispatcher.test.ts @@ -62,6 +62,13 @@ vi.mock('@unlock-protocol/unlock-js', () => ({ }, })) +vi.mock('@unlock-protocol/networks', () => ({ + 31337: { + provider: 'http://127.0.0.1:8545', + publicProvider: 'http://127.0.0.1:8545', + }, +})) + vi.mock('../../src/utils/gasSettings', () => ({ getGasSettings: vi.fn(() => { return { From c5d7b556a5fcd053a56ac0b22840becfd76b7258 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Tue, 19 Mar 2024 07:42:26 +0100 Subject: [PATCH 09/24] fix export in test --- locksmith/__tests__/fulfillment/dispatcher.test.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/locksmith/__tests__/fulfillment/dispatcher.test.ts b/locksmith/__tests__/fulfillment/dispatcher.test.ts index 4ffd5791644..00b6793b736 100644 --- a/locksmith/__tests__/fulfillment/dispatcher.test.ts +++ b/locksmith/__tests__/fulfillment/dispatcher.test.ts @@ -63,9 +63,11 @@ vi.mock('@unlock-protocol/unlock-js', () => ({ })) vi.mock('@unlock-protocol/networks', () => ({ - 31337: { - provider: 'http://127.0.0.1:8545', - publicProvider: 'http://127.0.0.1:8545', + default: { + 31337: { + provider: 'http://127.0.0.1:8545', + publicProvider: 'http://127.0.0.1:8545', + }, }, })) From 221811216ffacd71ff1908a41adf9cae611550d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Wed, 20 Mar 2024 14:33:14 +0100 Subject: [PATCH 10/24] use latest versions of contracts --- docker/development/eth-node/package.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docker/development/eth-node/package.json b/docker/development/eth-node/package.json index 378784aab02..0c9121542ff 100644 --- a/docker/development/eth-node/package.json +++ b/docker/development/eth-node/package.json @@ -10,9 +10,8 @@ }, "dependencies": { "@nomiclabs/hardhat-ethers": "2.2.3", - "@unlock-protocol/hardhat-plugin": "0.1.3", - "@unlock-protocol/contracts": "0.0.22", - "@unlock-protocol/contracts": "0.0.22", + "@unlock-protocol/hardhat-plugin": "latest", + "@unlock-protocol/contracts": "latest", "eslint": "8.54.0", "ethers": "5.7.2", "hardhat": "2.20.1", From afbcaf344b2518129d78e91b9659ef7055f839c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Wed, 20 Mar 2024 15:56:35 +0100 Subject: [PATCH 11/24] take address as param --- packages/networks/bin/localhost.js | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/packages/networks/bin/localhost.js b/packages/networks/bin/localhost.js index 73f74dc819c..82017c15706 100644 --- a/packages/networks/bin/localhost.js +++ b/packages/networks/bin/localhost.js @@ -50,17 +50,7 @@ export default localhost } const run = async () => { - const [networkInfoPath, subgraphEnpoint] = process.argv.slice(2) - - const networkInfo = await fs.readJSON(networkInfoPath) - const { - localhost: { - Unlock: { address: unlockAddress }, - }, - } = networkInfo - - console.log(networkInfo) - + const [unlockAddress, subgraphEnpoint] = process.argv.slice(2) console.log(`Creating localhost file for unlockAddress ${unlockAddress}`) if (!unlockAddress) { From 21e5a497f8a9c360f26c17099a849a62f15f8b26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Wed, 20 Mar 2024 15:59:22 +0100 Subject: [PATCH 12/24] fix yarn lock --- packages/networks/package.json | 1 - yarn.lock | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/networks/package.json b/packages/networks/package.json index e88bbab2d3e..31eac765cba 100644 --- a/packages/networks/package.json +++ b/packages/networks/package.json @@ -35,7 +35,6 @@ "eslint": "8.54.0", "fs-extra": "11.2.0", "tsup": "8.0.2", - "typescript": "5.3.3" }, "files": [ diff --git a/yarn.lock b/yarn.lock index 607a57bf7b6..0ef599be442 100644 --- a/yarn.lock +++ b/yarn.lock @@ -20065,6 +20065,7 @@ __metadata: eslint: "npm:8.54.0" eslint-plugin-sort-keys-fix: "npm:1.1.2" ethers: "npm:6.10.0" + fs-extra: "npm:11.2.0" tsup: "npm:8.0.2" tsx: "npm:4.7.1" typescript: "npm:5.3.3" From 98d35b363c37f75bd29d154fc624ac5351ba8697 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Wed, 20 Mar 2024 15:59:32 +0100 Subject: [PATCH 13/24] readme info --- packages/networks/README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/networks/README.md b/packages/networks/README.md index 4c714459082..662afab7682 100644 --- a/packages/networks/README.md +++ b/packages/networks/README.md @@ -19,6 +19,21 @@ console.log(networks[1].name) // mainnet yarn start ``` +## Localhost + +You can create a `localhost` network file with the following command: + +```sh +# create file +yarn create-localhost + +# export file by appending to network index +echo "export * from './localhost'" >> src/networks/index.ts + +# rebuild +yarn build +``` + ## Scripts - Check that networks are configured correctly: `yarn run check`. Some networks might be missing some properties. From 9cac0c0e87c801e820a027838e1f392c069144a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Wed, 20 Mar 2024 15:59:41 +0100 Subject: [PATCH 14/24] ignore localhost file --- packages/networks/.gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/networks/.gitignore b/packages/networks/.gitignore index 2cf1da454af..b12273ebe11 100644 --- a/packages/networks/.gitignore +++ b/packages/networks/.gitignore @@ -1,2 +1,3 @@ dist -build \ No newline at end of file +build +src/networks/localhost.ts \ No newline at end of file From fea6343100972e4ac594fb34c76be8992d4066db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Wed, 20 Mar 2024 16:03:52 +0100 Subject: [PATCH 15/24] pass unlock address via CLI --- packages/networks/bin/localhost.js | 2 +- tests/bin/prepare.sh | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/networks/bin/localhost.js b/packages/networks/bin/localhost.js index 82017c15706..31678b11ca6 100644 --- a/packages/networks/bin/localhost.js +++ b/packages/networks/bin/localhost.js @@ -36,7 +36,7 @@ const generateLocalhostNetworkFile = ({ unlockAddress, } - // log for debug purposes + // log for debug purposes on CI console.log(localhost) // output to js file diff --git a/tests/bin/prepare.sh b/tests/bin/prepare.sh index 4ccfed5f775..5e569172ee3 100644 --- a/tests/bin/prepare.sh +++ b/tests/bin/prepare.sh @@ -1,10 +1,11 @@ # this file is used to create a localhost network file -# networks file path when running on CI +# parse networks file when running on CI INFO_FILE_PATH=/home/unlock/networks.json +unlock_adress=$(cat "$INFO_FILE_PATH" | jq -r '.localhost.Unlock.address') # create localhost file in networks package -yarn workspace @unlock-protocol/networks create-localhost "$INFO_FILE_PATH" +yarn workspace @unlock-protocol/networks create-localhost "$unlock_adress" yarn workspace @unlock-protocol/networks build # rebuild unlock-js to get latest networks package From 6a299f713e9fef5dbbef45e310f4f6a00901020b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Wed, 20 Mar 2024 16:28:54 +0100 Subject: [PATCH 16/24] actually add localhost to networks in integration tests --- tests/bin/prepare.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/bin/prepare.sh b/tests/bin/prepare.sh index 5e569172ee3..382387d3b49 100644 --- a/tests/bin/prepare.sh +++ b/tests/bin/prepare.sh @@ -6,6 +6,11 @@ unlock_adress=$(cat "$INFO_FILE_PATH" | jq -r '.localhost.Unlock.address') # create localhost file in networks package yarn workspace @unlock-protocol/networks create-localhost "$unlock_adress" + +# append to networks index +echo "export * from './localhost'" >> src/networks/index.ts + +# rebuild networks yarn workspace @unlock-protocol/networks build # rebuild unlock-js to get latest networks package From 2843e704b232c7dba912671245bb73cd4c48a0ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Wed, 20 Mar 2024 16:51:29 +0100 Subject: [PATCH 17/24] actually use the localhost network file in integration tests --- packages/networks/src/networks/index.ts | 1 + tests/.eslintrc.js | 1 - tests/bin/prepare.sh | 26 ++++++++++++++++++++++--- tests/hardhat.config.ts | 22 ++++----------------- tests/package.json | 3 ++- tests/test/helpers/subgraph.ts | 8 ++++---- 6 files changed, 34 insertions(+), 27 deletions(-) diff --git a/packages/networks/src/networks/index.ts b/packages/networks/src/networks/index.ts index 3208f9d0dd4..5433dc9216c 100644 --- a/packages/networks/src/networks/index.ts +++ b/packages/networks/src/networks/index.ts @@ -14,3 +14,4 @@ export * from './sepolia' export * from './zkevm' export * from './scroll' export * from './zksync' +export * from './localhost' diff --git a/tests/.eslintrc.js b/tests/.eslintrc.js index 429743d1f37..6e2d28788ce 100644 --- a/tests/.eslintrc.js +++ b/tests/.eslintrc.js @@ -6,7 +6,6 @@ const rulesToIgnore = [ module.exports = { extends: ['@unlock-protocol/eslint-config'], - plugins: ['mocha'], globals: { it: true, artifacts: true, diff --git a/tests/bin/prepare.sh b/tests/bin/prepare.sh index 382387d3b49..c083b827375 100644 --- a/tests/bin/prepare.sh +++ b/tests/bin/prepare.sh @@ -1,14 +1,34 @@ -# this file is used to create a localhost network file +#!/usr/bin/env bash +set -e + +FOLDER_ROOT="$(pwd)/.." # parse networks file when running on CI -INFO_FILE_PATH=/home/unlock/networks.json +INFO_FILE_PATH="$FOLDER_ROOT/docker/development/eth-node/networks.json" +echo $INFO_FILE_PATH + +if [ ! -z "${CI}" ]; then + INFO_FILE_PATH='/home/unlock/networks.json' +fi + +if [ -f "$INFO_FILE_PATH" ]; then + echo "Using subgraph file at: $INFO_FILE_PATH" +else + echo "File does not exist: $INFO_FILE_PATH" + exit 1 +fi + unlock_adress=$(cat "$INFO_FILE_PATH" | jq -r '.localhost.Unlock.address') +if [ ! -n $unlock_adress ]; then + echo "Missing Unlock Address" + exit 1 +fi # create localhost file in networks package yarn workspace @unlock-protocol/networks create-localhost "$unlock_adress" # append to networks index -echo "export * from './localhost'" >> src/networks/index.ts +echo "export * from './localhost'" >> "$FOLDER_ROOT/packages/networks/src/networks/index.ts" # rebuild networks yarn workspace @unlock-protocol/networks build diff --git a/tests/hardhat.config.ts b/tests/hardhat.config.ts index b9d789ab117..10278cc3a34 100644 --- a/tests/hardhat.config.ts +++ b/tests/hardhat.config.ts @@ -2,18 +2,7 @@ import { HardhatUserConfig } from 'hardhat/config' import '@nomicfoundation/hardhat-toolbox' import '@unlock-protocol/hardhat-plugin' -import path from 'path' -import fs from 'fs-extra' - -const SUBGRAPH_NETWORKS_CONFIG_PATH = process.env.CI - ? '/home/unlock/networks.json' - : path.join(__dirname, '..', './subgraph/networks.json') - -const { localhost: subgraphConfig } = fs.readJSONSync( - SUBGRAPH_NETWORKS_CONFIG_PATH -) - -const unlockAddress = subgraphConfig.Unlock.address +import { localhost } from '@unlock-protocol/networks' const config: HardhatUserConfig = { solidity: '0.8.9', @@ -23,12 +12,9 @@ const config: HardhatUserConfig = { }, }, unlock: { - 31337: { - unlockAddress, - }, - docker: { - unlockAddress, - }, + localhost, + 31337: localhost, + docker: localhost, }, mocha: { timeout: 2000000, diff --git a/tests/package.json b/tests/package.json index 4ffb977543d..efbdf87a170 100644 --- a/tests/package.json +++ b/tests/package.json @@ -5,7 +5,7 @@ "lint:fix": "yarn lint --fix", "lint": "eslint --resolve-plugins-relative-to ../eslint-config --ext .tsx,.ts,.js scripts/ test/", "test": "hardhat test", - "test:prepare": "sh prepare.sh", + "test:prepare": "sh bin/prepare.sh", "ci": "yarn test:prepare && yarn test --network 0.0.0.0" }, "dependencies": { @@ -27,6 +27,7 @@ "@types/node": "12.0.0", "@unlock-protocol/eslint-config": "workspace:^", "@unlock-protocol/hardhat-plugin": "workspace:^", + "@unlock-protocol/networks": "workspace:^", "apollo-link-http": "1.5.17", "chai": "4.2.0", "eslint": "8.46.0", diff --git a/tests/test/helpers/subgraph.ts b/tests/test/helpers/subgraph.ts index adf115b80e2..29e79b35620 100644 --- a/tests/test/helpers/subgraph.ts +++ b/tests/test/helpers/subgraph.ts @@ -9,11 +9,11 @@ import { HttpLink } from 'apollo-link-http' import { genKeyId } from './keys' import type { BigNumber } from 'ethers' -const subgraphURI = `http://${ - process.env.CI ? 'graph-node' : '127.0.0.1' -}:8000/subgraphs/name/testgraph` +import { localhost } from '@unlock-protocol/networks' -console.log(subgraphURI) +const { + subgraph: { endpoint: subgraphURI }, +} = localhost const link = new HttpLink({ uri: subgraphURI, From 5bfebbe65b8b4e1b79154560ca88f22eac99766c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Wed, 20 Mar 2024 16:52:34 +0100 Subject: [PATCH 18/24] remove localhost from index --- packages/networks/src/networks/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/networks/src/networks/index.ts b/packages/networks/src/networks/index.ts index 5433dc9216c..3208f9d0dd4 100644 --- a/packages/networks/src/networks/index.ts +++ b/packages/networks/src/networks/index.ts @@ -14,4 +14,3 @@ export * from './sepolia' export * from './zkevm' export * from './scroll' export * from './zksync' -export * from './localhost' From 38680279731b7f9f0dc2527839f598e0ba814166 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Wed, 20 Mar 2024 17:33:52 +0100 Subject: [PATCH 19/24] fix integration tests command --- packages/networks/src/networks/index.ts | 2 ++ scripts/integration-tests.sh | 2 +- tests/bin/prepare.sh | 4 +++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/networks/src/networks/index.ts b/packages/networks/src/networks/index.ts index 3208f9d0dd4..b682a2cc992 100644 --- a/packages/networks/src/networks/index.ts +++ b/packages/networks/src/networks/index.ts @@ -14,3 +14,5 @@ export * from './sepolia' export * from './zkevm' export * from './scroll' export * from './zksync' +export * from './localhost' +export * from './localhost' diff --git a/scripts/integration-tests.sh b/scripts/integration-tests.sh index ce0c9c0a8f0..5cd1059c48e 100755 --- a/scripts/integration-tests.sh +++ b/scripts/integration-tests.sh @@ -18,6 +18,6 @@ export UNLOCK_ENV=test # run the actual tests echo "Running integration tests \n" -COMMAND="yarn workspace tests test --network docker" +COMMAND="yarn workspace tests ci --network docker" docker-compose $COMPOSE_CONFIG build integration-tests docker-compose $COMPOSE_CONFIG run -e UNLOCK_ENV=test -e CI=true $EXTRA_ARGS integration-tests bash -c "$COMMAND" diff --git a/tests/bin/prepare.sh b/tests/bin/prepare.sh index c083b827375..64ce3011e91 100644 --- a/tests/bin/prepare.sh +++ b/tests/bin/prepare.sh @@ -5,12 +5,13 @@ FOLDER_ROOT="$(pwd)/.." # parse networks file when running on CI INFO_FILE_PATH="$FOLDER_ROOT/docker/development/eth-node/networks.json" -echo $INFO_FILE_PATH +# use docker mounted file on CI if [ ! -z "${CI}" ]; then INFO_FILE_PATH='/home/unlock/networks.json' fi +# make sure file exists if [ -f "$INFO_FILE_PATH" ]; then echo "Using subgraph file at: $INFO_FILE_PATH" else @@ -18,6 +19,7 @@ else exit 1 fi +# parse Unlock address from network info file unlock_adress=$(cat "$INFO_FILE_PATH" | jq -r '.localhost.Unlock.address') if [ ! -n $unlock_adress ]; then echo "Missing Unlock Address" From 108e806d762ae347f72cc1888df5f6628891a96b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Wed, 20 Mar 2024 17:34:53 +0100 Subject: [PATCH 20/24] remove unwanted lines --- packages/networks/src/networks/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/networks/src/networks/index.ts b/packages/networks/src/networks/index.ts index b682a2cc992..3208f9d0dd4 100644 --- a/packages/networks/src/networks/index.ts +++ b/packages/networks/src/networks/index.ts @@ -14,5 +14,3 @@ export * from './sepolia' export * from './zkevm' export * from './scroll' export * from './zksync' -export * from './localhost' -export * from './localhost' From d21080924deb419c2baec88b52392048f1dc86ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Wed, 20 Mar 2024 18:02:42 +0100 Subject: [PATCH 21/24] remove use of jq --- packages/networks/README.md | 18 ++++++++++++++++++ packages/networks/bin/readSubgraphInfo.js | 20 ++++++++++++++++++++ packages/networks/package.json | 1 + tests/bin/prepare.sh | 2 +- 4 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 packages/networks/bin/readSubgraphInfo.js diff --git a/packages/networks/README.md b/packages/networks/README.md index 662afab7682..5a9b89fe9df 100644 --- a/packages/networks/README.md +++ b/packages/networks/README.md @@ -34,6 +34,24 @@ echo "export * from './localhost'" >> src/networks/index.ts yarn build ``` +#### Read Unlock Address from a file + +Optionally, you can parse the Unlock address from a subgraph manifest file formatted as follow + +```json +{ + "localhost": { + "Unlock": { "address": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6" } + } +} +``` + +with the following command + +```sh +yarn workspace @unlock-protocol/networks unlock-address .json +``` + ## Scripts - Check that networks are configured correctly: `yarn run check`. Some networks might be missing some properties. diff --git a/packages/networks/bin/readSubgraphInfo.js b/packages/networks/bin/readSubgraphInfo.js new file mode 100644 index 00000000000..3e9c3f69a44 --- /dev/null +++ b/packages/networks/bin/readSubgraphInfo.js @@ -0,0 +1,20 @@ +import fs from 'fs-extra' + +// this is used to read a network +const run = async () => { + const [networkInfoPath] = process.argv.slice(2) + const networkInfo = await fs.readJSON(networkInfoPath) + const { + localhost: { + Unlock: { address: unlockAddress }, + }, + } = networkInfo + console.log(networkInfo) + return unlockAddress +} + +run() + .then((unlockAddress) => console.log(unlockAddress)) + .catch((err) => { + throw err + }) diff --git a/packages/networks/package.json b/packages/networks/package.json index 31eac765cba..8f7040d34df 100644 --- a/packages/networks/package.json +++ b/packages/networks/package.json @@ -19,6 +19,7 @@ "check-tokens": "tsx ./bin/check-tokens", "clean": "rm -rf ./dist", "create-localhost": "tsx ./bin/localhost", + "unlock-address": "tsx ./bin/readSubgraphInfo", "check": "tsx ./bin/keys", "prepublish": "yarn build", "doc": "node ./bin/doc.js", diff --git a/tests/bin/prepare.sh b/tests/bin/prepare.sh index 64ce3011e91..8856f4c22d6 100644 --- a/tests/bin/prepare.sh +++ b/tests/bin/prepare.sh @@ -20,7 +20,7 @@ else fi # parse Unlock address from network info file -unlock_adress=$(cat "$INFO_FILE_PATH" | jq -r '.localhost.Unlock.address') +unlock_adress=$(yarn workspace @unlock-protocol/networks unlock-address "$INFO_FILE_PATH") if [ ! -n $unlock_adress ]; then echo "Missing Unlock Address" exit 1 From 4437330d1f6241d39422b9c55d311ce476efe47c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Wed, 20 Mar 2024 19:51:15 +0100 Subject: [PATCH 22/24] remove console log --- packages/networks/bin/readSubgraphInfo.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/networks/bin/readSubgraphInfo.js b/packages/networks/bin/readSubgraphInfo.js index 3e9c3f69a44..85f0ef5476a 100644 --- a/packages/networks/bin/readSubgraphInfo.js +++ b/packages/networks/bin/readSubgraphInfo.js @@ -9,7 +9,6 @@ const run = async () => { Unlock: { address: unlockAddress }, }, } = networkInfo - console.log(networkInfo) return unlockAddress } From bcd2c4cc47ea68becf748f59b8be02bbdd8362c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Wed, 20 Mar 2024 20:19:41 +0100 Subject: [PATCH 23/24] Update package.json --- tests/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/package.json b/tests/package.json index efbdf87a170..50b55be9aaa 100644 --- a/tests/package.json +++ b/tests/package.json @@ -6,7 +6,7 @@ "lint": "eslint --resolve-plugins-relative-to ../eslint-config --ext .tsx,.ts,.js scripts/ test/", "test": "hardhat test", "test:prepare": "sh bin/prepare.sh", - "ci": "yarn test:prepare && yarn test --network 0.0.0.0" + "ci": "yarn test:prepare && yarn test" }, "dependencies": { "@apollo/client": "3.6.9", From 0031f64ecc3aaac9078bd0560730e77c108aa22c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renaud?= Date: Wed, 20 Mar 2024 21:01:53 +0100 Subject: [PATCH 24/24] pass docker graph url --- tests/bin/prepare.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/bin/prepare.sh b/tests/bin/prepare.sh index 8856f4c22d6..caf7982a48d 100644 --- a/tests/bin/prepare.sh +++ b/tests/bin/prepare.sh @@ -27,7 +27,7 @@ if [ ! -n $unlock_adress ]; then fi # create localhost file in networks package -yarn workspace @unlock-protocol/networks create-localhost "$unlock_adress" +yarn workspace @unlock-protocol/networks create-localhost "$unlock_adress" http://graph-node:8000/subgraphs/name/testgraph # append to networks index echo "export * from './localhost'" >> "$FOLDER_ROOT/packages/networks/src/networks/index.ts"