From 0e847a45b031e8344d4c351e7264ea40981ba278 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yago=20P=C3=A9rez=20V=C3=A1zquez?= Date: Mon, 24 Mar 2025 11:06:16 +0100 Subject: [PATCH 1/6] feat: Publish info file (#1179) --- .github/workflows/create-integrity-file.yml | 39 +++++++ .gitignore | 2 + package.json | 3 +- packages/protocol-kit/tsconfig.build.json | 1 - packages/protocol-kit/tsconfig.json | 1 - packages/relay-kit/tsconfig.build.json | 1 - packages/relay-kit/tsconfig.json | 1 - playground/tsconfig.json | 1 - scripts/generate-publish-info.ts | 118 ++++++++++++++++++++ 9 files changed, 161 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/create-integrity-file.yml create mode 100644 scripts/generate-publish-info.ts diff --git a/.github/workflows/create-integrity-file.yml b/.github/workflows/create-integrity-file.yml new file mode 100644 index 000000000..1de79e057 --- /dev/null +++ b/.github/workflows/create-integrity-file.yml @@ -0,0 +1,39 @@ +name: Create publish info file + +on: + release: + types: [created] + workflow_dispatch: + push: + branches: + - prepare-release + +permissions: + contents: read + +jobs: + generate-publish-info: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: yarn + - run: | + yarn install --frozen-lockfile + yarn build + + - name: Run integrity check script + run: | + yarn generate-publish-info + + - name: Upload YAML artifact + uses: actions/upload-artifact@v4 + with: + name: publish-info + path: ./publish-info + + - name: Show YAML output + run: cat ./publish-info/*.yml diff --git a/.gitignore b/.gitignore index 99cb3c5ef..a337ae248 100644 --- a/.gitignore +++ b/.gitignore @@ -62,3 +62,5 @@ openapi/ yalc.lock # Local Netlify folder .netlify + +publish-info/ \ No newline at end of file diff --git a/package.json b/package.json index af9c677b4..d819ef79e 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "test": "FORCE_COLOR=1 lerna run test --stream", "play": "ts-node ./playground/config/run.ts", "format": "lerna run format && prettier --write \"playground/**/*.ts\"", - "prepare": "husky" + "prepare": "husky", + "generate-publish-info": "ts-node ./scripts/generate-publish-info.ts" }, "workspaces": { "packages": [ diff --git a/packages/protocol-kit/tsconfig.build.json b/packages/protocol-kit/tsconfig.build.json index c05e497c4..719a77ea0 100644 --- a/packages/protocol-kit/tsconfig.build.json +++ b/packages/protocol-kit/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.settings.json", "compilerOptions": { - "composite": true, "outDir": "dist" }, "include": ["src/**/*"] diff --git a/packages/protocol-kit/tsconfig.json b/packages/protocol-kit/tsconfig.json index 5f6bc90a7..4637eb5bf 100644 --- a/packages/protocol-kit/tsconfig.json +++ b/packages/protocol-kit/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.settings.json", "compilerOptions": { - "composite": true, "outDir": "dist" }, "include": ["src/**/*", "tests/**/*", "hardhat/**/*", "hardhat.config.ts"] diff --git a/packages/relay-kit/tsconfig.build.json b/packages/relay-kit/tsconfig.build.json index cc22498f1..8632875eb 100644 --- a/packages/relay-kit/tsconfig.build.json +++ b/packages/relay-kit/tsconfig.build.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.settings.json", "compilerOptions": { - "composite": true, "outDir": "dist" }, "include": ["src/**/*"], diff --git a/packages/relay-kit/tsconfig.json b/packages/relay-kit/tsconfig.json index c05e497c4..719a77ea0 100644 --- a/packages/relay-kit/tsconfig.json +++ b/packages/relay-kit/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.settings.json", "compilerOptions": { - "composite": true, "outDir": "dist" }, "include": ["src/**/*"] diff --git a/playground/tsconfig.json b/playground/tsconfig.json index 906bd7f65..be1e355ac 100644 --- a/playground/tsconfig.json +++ b/playground/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../tsconfig.settings.json", "compilerOptions": { - "composite": true, "noImplicitThis": false, "outDir": "dist" }, diff --git a/scripts/generate-publish-info.ts b/scripts/generate-publish-info.ts new file mode 100644 index 000000000..c70df1894 --- /dev/null +++ b/scripts/generate-publish-info.ts @@ -0,0 +1,118 @@ +import { execFile } from 'child_process' +import * as fs from 'fs' +import * as path from 'path' +import * as yaml from 'yaml' + +type PackagePublishInfo = { + id: string + name: string + version: string + size: number + unpackedSize: number + shasum: string + integrity: string + filename: string + entryCount: number +} + +type NpmPublishOutput = Record< + string, + PackagePublishInfo & { + files?: string[] + bundled?: unknown[] + } +> + +const executeCommand = (command: string, args: string[]): Promise => { + return new Promise((resolve, reject) => { + execFile(command, args, (error, stdout, stderr) => { + if (error) { + return reject(`Error executing command: ${error.message}`) + } + + if (stderr) { + console.warn(`Warning during execution: ${stderr}`) + } + + resolve(stdout) + }) + }) +} + +const writeToFile = (filePath: string, data: string): Promise => { + return new Promise((resolve, reject) => { + const safeDir = path.join(process.cwd(), 'publish-info') + + fs.mkdir(safeDir, { recursive: true, mode: 0o700 }, (err) => { + if (err) return reject(`Directory creation failed: ${err.message}`) + + const fullPath = path.join(safeDir, path.basename(filePath)) + + fs.writeFile(fullPath, data, { mode: 0o600 }, (writeErr) => { + if (writeErr) return reject(`File write failed: ${writeErr.message}`) + resolve() + }) + }) + }) +} + +const sanitizePublishOutput = (jsonData: NpmPublishOutput): Record => { + return Object.fromEntries( + Object.entries(jsonData).map(([pkgName, pkgData]) => { + const { files, bundled, ...cleanData } = pkgData + + return [pkgName, cleanData] + }) + ) +} + +const getReadableFilename = (): string => { + try { + const now = new Date() + const pad = (n: number) => n.toString().padStart(2, '0') + const datePart = [now.getFullYear(), pad(now.getMonth() + 1), pad(now.getDate())].join('-') + const timePart = [pad(now.getHours()), pad(now.getMinutes()), pad(now.getSeconds())].join('-') + const timestamp = `${datePart}_${timePart}` + + return `publish-info_${timestamp}.yml` + } catch { + return `publish-info_${Date.now()}.yml` + } +} + +const main = async () => { + try { + const projectRoot = path.join(__dirname, '../') + process.chdir(projectRoot) + + const stdout = await executeCommand('npm', [ + 'publish', + '--access', + 'public', + '--dry-run', + '--workspaces', + '--json', + '--ignore-scripts' + ]) + + let jsonOutput: NpmPublishOutput + try { + jsonOutput = JSON.parse(stdout) as NpmPublishOutput + } catch (parseError) { + throw new Error(`Error parsing JSON output: ${(parseError as Error).message}`) + } + + const cleanedOutput = sanitizePublishOutput(jsonOutput) + const yamlOutput = yaml.stringify(cleanedOutput) + + const outputFileName = getReadableFilename() + await writeToFile(outputFileName, yamlOutput) + + console.log(`Output stored in ${outputFileName}`) + } catch (error) { + console.error(`Error: ${error instanceof Error ? error.message : error}`) + process.exit(1) + } +} + +main() From f166609b4a83845916df0cee84f21cb0bc7c1568 Mon Sep 17 00:00:00 2001 From: Daniel <25051234+dasanra@users.noreply.github.com> Date: Fri, 4 Apr 2025 13:34:41 +0200 Subject: [PATCH 2/6] fix: check node process in config is available (#1190) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --------- Co-authored-by: Yago Pérez Vázquez --- .../scripts/safe-deployments/updateLocalNetworks.ts | 2 +- packages/protocol-kit/src/utils/eip-3770/config.ts | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/protocol-kit/scripts/safe-deployments/updateLocalNetworks.ts b/packages/protocol-kit/scripts/safe-deployments/updateLocalNetworks.ts index 157d2f525..e22440e4d 100644 --- a/packages/protocol-kit/scripts/safe-deployments/updateLocalNetworks.ts +++ b/packages/protocol-kit/scripts/safe-deployments/updateLocalNetworks.ts @@ -26,7 +26,7 @@ function updateLocalNetworks(networks: NetworkShortName[]) { const startIndex = content.indexOf('export const networks: NetworkShortName[] = [') + 'export const networks: NetworkShortName[] = ['.length - const endIndex = content.indexOf(']\n\nif (process.env.TEST_NETWORK ===') + const endIndex = content.indexOf(']\n\ntry {') const sortedNetworks = networks .sort((a, b) => Number(a.chainId - b.chainId)) diff --git a/packages/protocol-kit/src/utils/eip-3770/config.ts b/packages/protocol-kit/src/utils/eip-3770/config.ts index cc1866081..7cd83713a 100644 --- a/packages/protocol-kit/src/utils/eip-3770/config.ts +++ b/packages/protocol-kit/src/utils/eip-3770/config.ts @@ -396,6 +396,10 @@ export const networks: NetworkShortName[] = [ { chainId: 920637907288165n, shortName: 'kkrt-starknet-sepolia' } ] -if (process.env.TEST_NETWORK === 'hardhat') { - networks.push({ shortName: 'local', chainId: 31337n }) +try { + if (process.env.TEST_NETWORK === 'hardhat') { + networks.push({ shortName: 'local', chainId: 31337n }) + } +} catch { + // When process is not available we run on a browser environment } From 542353e83b148fc67407f6ab065d7f7f7cb369d2 Mon Sep 17 00:00:00 2001 From: Daniel <25051234+dasanra@users.noreply.github.com> Date: Tue, 8 Apr 2025 13:08:25 +0200 Subject: [PATCH 3/6] fix: add Lens to zksync array and 1.4.1 bytecodeHash (#1194) --- packages/protocol-kit/src/contracts/utils.ts | 18 +++++++++++------- .../tests/e2e/utilsContracts.test.ts | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/protocol-kit/src/contracts/utils.ts b/packages/protocol-kit/src/contracts/utils.ts index 442ea9f3e..e3b247bdd 100644 --- a/packages/protocol-kit/src/contracts/utils.ts +++ b/packages/protocol-kit/src/contracts/utils.ts @@ -38,7 +38,8 @@ export const PREDETERMINED_SALT_NONCE = '0xb1073742015cbcf5a3a4d9d1ae33ecf619439710b89475f92e2abd2117e90f90' const ZKSYNC_MAINNET = 324n -const ZKSYNC_TESTNET = 280n +const ZKSYNC_TESTNET = 300n +const ZKSYNC_LENS = 232n // For bundle size efficiency we store SafeProxy.sol/GnosisSafeProxy.sol zksync bytecode hash in hex. // To get the values below we need to: // 1. Compile Safe smart contracts for zksync @@ -52,6 +53,9 @@ const ZKSYNC_SAFE_PROXY_DEPLOYED_BYTECODE: { } = { '1.3.0': { deployedBytecodeHash: '0x0100004124426fb9ebb25e27d670c068e52f9ba631bd383279a188be47e3f86d' + }, + '1.4.1': { + deployedBytecodeHash: '0x0100003b6cfa15bd7d1cae1c9c022074524d7785d34859ad0576d8fab4305d4f' } } @@ -311,10 +315,10 @@ export async function predictSafeAddress({ const from = await safeProxyFactoryContract.getAddress() - // On the zkSync Era chain, the counterfactual deployment address is calculated differently - const isZkSyncEraChain = [ZKSYNC_MAINNET, ZKSYNC_TESTNET].includes(chainId) - if (isZkSyncEraChain) { - const proxyAddress = zkSyncEraCreate2Address(from, safeVersion, salt, input) + // On the zkSync chains, the counterfactual deployment address is calculated differently + const isZkSyncChain = [ZKSYNC_MAINNET, ZKSYNC_TESTNET, ZKSYNC_LENS].includes(chainId) + if (isZkSyncChain) { + const proxyAddress = zkSyncCreate2Address(from, safeVersion, salt, input) return safeProvider.getChecksummedAddress(proxyAddress) } @@ -348,9 +352,9 @@ export const validateSafeDeploymentConfig = ({ saltNonce }: SafeDeploymentConfig * @param {Buffer} salt - The salt used for address derivation. * @param {string} input - Additional input data for the derivation. * - * @returns {string} The derived zkSync Era address. + * @returns {string} The derived zkSync address. */ -export function zkSyncEraCreate2Address( +export function zkSyncCreate2Address( from: string, safeVersion: SafeVersion, salt: Buffer, diff --git a/packages/protocol-kit/tests/e2e/utilsContracts.test.ts b/packages/protocol-kit/tests/e2e/utilsContracts.test.ts index c2827e7f4..d6233607f 100644 --- a/packages/protocol-kit/tests/e2e/utilsContracts.test.ts +++ b/packages/protocol-kit/tests/e2e/utilsContracts.test.ts @@ -524,7 +524,7 @@ describe('Contract utils', () => { ) itif(safeVersionDeployed === '1.3.0')( - 'returns the predicted address for Safes deployed on zkSync Era', + 'returns the predicted address for Safes deployed on zkSync EVM', async () => { const { contractNetworks } = await setupTests() From f419470f6949f411eca53fa9b897182dbb6b533f Mon Sep 17 00:00:00 2001 From: Daniel <25051234+dasanra@users.noreply.github.com> Date: Tue, 8 Apr 2025 13:39:19 +0200 Subject: [PATCH 4/6] fix: restore composite where needed --- packages/protocol-kit/tsconfig.build.json | 1 + packages/protocol-kit/tsconfig.json | 1 + packages/relay-kit/tsconfig.build.json | 1 + packages/relay-kit/tsconfig.json | 1 + 4 files changed, 4 insertions(+) diff --git a/packages/protocol-kit/tsconfig.build.json b/packages/protocol-kit/tsconfig.build.json index 719a77ea0..c05e497c4 100644 --- a/packages/protocol-kit/tsconfig.build.json +++ b/packages/protocol-kit/tsconfig.build.json @@ -1,6 +1,7 @@ { "extends": "../../tsconfig.settings.json", "compilerOptions": { + "composite": true, "outDir": "dist" }, "include": ["src/**/*"] diff --git a/packages/protocol-kit/tsconfig.json b/packages/protocol-kit/tsconfig.json index 4637eb5bf..5f6bc90a7 100644 --- a/packages/protocol-kit/tsconfig.json +++ b/packages/protocol-kit/tsconfig.json @@ -1,6 +1,7 @@ { "extends": "../../tsconfig.settings.json", "compilerOptions": { + "composite": true, "outDir": "dist" }, "include": ["src/**/*", "tests/**/*", "hardhat/**/*", "hardhat.config.ts"] diff --git a/packages/relay-kit/tsconfig.build.json b/packages/relay-kit/tsconfig.build.json index 8632875eb..cc22498f1 100644 --- a/packages/relay-kit/tsconfig.build.json +++ b/packages/relay-kit/tsconfig.build.json @@ -1,6 +1,7 @@ { "extends": "../../tsconfig.settings.json", "compilerOptions": { + "composite": true, "outDir": "dist" }, "include": ["src/**/*"], diff --git a/packages/relay-kit/tsconfig.json b/packages/relay-kit/tsconfig.json index 719a77ea0..c05e497c4 100644 --- a/packages/relay-kit/tsconfig.json +++ b/packages/relay-kit/tsconfig.json @@ -1,6 +1,7 @@ { "extends": "../../tsconfig.settings.json", "compilerOptions": { + "composite": true, "outDir": "dist" }, "include": ["src/**/*"] From 2734a55c671c184f550d660a86f68a743dba02d8 Mon Sep 17 00:00:00 2001 From: Daniel <25051234+dasanra@users.noreply.github.com> Date: Tue, 8 Apr 2025 13:52:16 +0200 Subject: [PATCH 5/6] tests: change rpc provider for mainnet tests --- packages/protocol-kit/tests/e2e/utils/setupProvider.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/protocol-kit/tests/e2e/utils/setupProvider.ts b/packages/protocol-kit/tests/e2e/utils/setupProvider.ts index 35d8bf59b..2ec22a4b7 100644 --- a/packages/protocol-kit/tests/e2e/utils/setupProvider.ts +++ b/packages/protocol-kit/tests/e2e/utils/setupProvider.ts @@ -47,14 +47,11 @@ export function getSafeProviderFromNetwork( case 'gnosis': rpcUrl = 'https://rpc.gnosischain.com' break - case 'goerli': - rpcUrl = 'https://rpc.ankr.com/eth_goerli' - break case 'sepolia': rpcUrl = 'https://sepolia.gateway.tenderly.co' break case 'mainnet': - rpcUrl = 'https://rpc.ankr.com/eth' + rpcUrl = 'https://ethereum-rpc.publicnode.com' break default: throw new Error('Chain not supported') From caa40f52e5bc4bf3ddf5219c727d913137aa5ddb Mon Sep 17 00:00:00 2001 From: Daniel <25051234+dasanra@users.noreply.github.com> Date: Tue, 8 Apr 2025 14:20:21 +0200 Subject: [PATCH 6/6] chore: set release version --- packages/api-kit/package.json | 2 +- packages/auth-kit/package.json | 2 +- packages/onramp-kit/package.json | 2 +- packages/protocol-kit/package.json | 2 +- packages/relay-kit/package.json | 2 +- packages/sdk-starter-kit/package.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/api-kit/package.json b/packages/api-kit/package.json index e4913c592..63b8d01d3 100644 --- a/packages/api-kit/package.json +++ b/packages/api-kit/package.json @@ -59,7 +59,7 @@ "yargs": "^17.7.2" }, "dependencies": { - "@safe-global/protocol-kit": "^4.1.6", + "@safe-global/protocol-kit": "^4.1.7", "@safe-global/safe-core-sdk-types": "^5.1.0", "ethers": "^6.13.1", "node-fetch": "^2.7.0" diff --git a/packages/auth-kit/package.json b/packages/auth-kit/package.json index 03a512011..7ee9f1abd 100644 --- a/packages/auth-kit/package.json +++ b/packages/auth-kit/package.json @@ -40,7 +40,7 @@ }, "dependencies": { "@safe-global/api-kit": "^2.4.6", - "@safe-global/protocol-kit": "^4.1.6", + "@safe-global/protocol-kit": "^4.1.7", "@web3auth/safeauth-embed": "^0.0.0", "ethers": "^6.13.1" } diff --git a/packages/onramp-kit/package.json b/packages/onramp-kit/package.json index ab46f18f4..57262d264 100644 --- a/packages/onramp-kit/package.json +++ b/packages/onramp-kit/package.json @@ -37,7 +37,7 @@ "dependencies": { "@monerium/sdk": "^2.12.0", "@safe-global/api-kit": "^2.4.6", - "@safe-global/protocol-kit": "^4.1.6", + "@safe-global/protocol-kit": "^4.1.7", "@safe-global/safe-core-sdk-types": "^5.1.0", "@stripe/crypto": "^0.0.4", "@stripe/stripe-js": "^1.54.2", diff --git a/packages/protocol-kit/package.json b/packages/protocol-kit/package.json index f0412ce3b..839c1fd5c 100644 --- a/packages/protocol-kit/package.json +++ b/packages/protocol-kit/package.json @@ -1,6 +1,6 @@ { "name": "@safe-global/protocol-kit", - "version": "4.1.6", + "version": "4.1.7", "description": "SDK that facilitates the interaction with Safe Smart Accounts", "main": "dist/src/index.js", "types": "dist/src/index.d.ts", diff --git a/packages/relay-kit/package.json b/packages/relay-kit/package.json index 234be1a8e..793b2a660 100644 --- a/packages/relay-kit/package.json +++ b/packages/relay-kit/package.json @@ -39,7 +39,7 @@ }, "dependencies": { "@gelatonetwork/relay-sdk": "^5.5.0", - "@safe-global/protocol-kit": "^4.1.6", + "@safe-global/protocol-kit": "^4.1.7", "@safe-global/safe-core-sdk-types": "^5.1.0", "@safe-global/safe-modules-deployments": "^2.2.1", "ethers": "^6.13.1" diff --git a/packages/sdk-starter-kit/package.json b/packages/sdk-starter-kit/package.json index 239a13799..b09395252 100644 --- a/packages/sdk-starter-kit/package.json +++ b/packages/sdk-starter-kit/package.json @@ -37,7 +37,7 @@ }, "dependencies": { "@safe-global/api-kit": "^2.4.6", - "@safe-global/protocol-kit": "^4.1.6", + "@safe-global/protocol-kit": "^4.1.7", "@safe-global/relay-kit": "^3.1.1", "@safe-global/safe-core-sdk-types": "^5.1.0", "ethers": "^6.13.1"