From 9078b9d291b151d5cd9db03229fda154e4132ab9 Mon Sep 17 00:00:00 2001 From: Eric Lau Date: Tue, 14 Nov 2023 13:47:02 -0500 Subject: [PATCH 1/3] Update Defender SDK (#924) --- .github/workflows/checks.yml | 1 - packages/plugin-hardhat/CHANGELOG.md | 7 +++ packages/plugin-hardhat/package.json | 8 +-- .../src/defender-v1/propose-upgrade.ts | 4 +- .../plugin-hardhat/src/defender/deploy.ts | 23 ++++++--- packages/plugin-hardhat/tsconfig.json | 3 +- yarn.lock | 51 +++++++++++-------- 7 files changed, 63 insertions(+), 34 deletions(-) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 1ef10d172..9847444ee 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -28,7 +28,6 @@ jobs: package: - core - plugin-hardhat - - plugin-truffle runs-on: ubuntu-latest diff --git a/packages/plugin-hardhat/CHANGELOG.md b/packages/plugin-hardhat/CHANGELOG.md index cf00b6deb..81b72e7da 100644 --- a/packages/plugin-hardhat/CHANGELOG.md +++ b/packages/plugin-hardhat/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## Unreleased + +- Update Defender SDK. ([#924](https://github.com/OpenZeppelin/openzeppelin-upgrades/pull/924)) +- Throw error if not using a relayer for deployments, until other types of deployments are supported. + +**Note**: OpenZeppelin Defender deployments is in beta and its functionality is subject to change. + ## 2.4.0 (2023-11-13) - Add `createFactoryAddress` option for Defender deployments. ([#920](https://github.com/OpenZeppelin/openzeppelin-upgrades/pull/920)) diff --git a/packages/plugin-hardhat/package.json b/packages/plugin-hardhat/package.json index c4848149e..5181dfd7a 100644 --- a/packages/plugin-hardhat/package.json +++ b/packages/plugin-hardhat/package.json @@ -36,10 +36,10 @@ "sinon": "^17.0.0" }, "dependencies": { - "@openzeppelin/defender-admin-client": "^1.48.0", - "@openzeppelin/defender-base-client": "^1.48.0", - "@openzeppelin/defender-sdk-base-client": "^1.2.0", - "@openzeppelin/defender-sdk-deploy-client": "^1.2.0", + "@openzeppelin/defender-admin-client": "^1.52.0", + "@openzeppelin/defender-base-client": "^1.52.0", + "@openzeppelin/defender-sdk-base-client": "^1.5.0", + "@openzeppelin/defender-sdk-deploy-client": "^1.5.0", "@openzeppelin/upgrades-core": "^1.30.1", "chalk": "^4.1.0", "debug": "^4.1.1", diff --git a/packages/plugin-hardhat/src/defender-v1/propose-upgrade.ts b/packages/plugin-hardhat/src/defender-v1/propose-upgrade.ts index 4d7b2a7a2..9d33ffa2c 100644 --- a/packages/plugin-hardhat/src/defender-v1/propose-upgrade.ts +++ b/packages/plugin-hardhat/src/defender-v1/propose-upgrade.ts @@ -5,7 +5,7 @@ import { isTransparentOrUUPSProxy, isTransparentProxy, } from '@openzeppelin/upgrades-core'; -import { ProposalResponse } from '@openzeppelin/defender-admin-client'; +import { ProposalResponse, CreateProposalRequest } from '@openzeppelin/defender-admin-client'; import { ContractFactory, getCreateAddress, ethers } from 'ethers'; import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { getAdminClient, getNetwork } from './utils'; @@ -28,7 +28,7 @@ export interface ProposalOptions extends UpgradeOptions { description?: string; proxyAdmin?: string; multisig?: string; - multisigType?: 'Gnosis Safe' | 'Gnosis Multisig' | 'EOA'; + multisigType?: CreateProposalRequest['viaType']; bytecodeVerificationReferenceUrl?: string; } diff --git a/packages/plugin-hardhat/src/defender/deploy.ts b/packages/plugin-hardhat/src/defender/deploy.ts index a751a89c1..1687374d9 100644 --- a/packages/plugin-hardhat/src/defender/deploy.ts +++ b/packages/plugin-hardhat/src/defender/deploy.ts @@ -54,11 +54,6 @@ type CompilerOutputWithMetadata = CompilerOutputContract & { metadata?: string; }; -type DeployRequest = DeployContractRequest & { - // TODO: remove this when defender-sdk-deploy-client dependency is updated - createFactoryAddress?: string; -}; - export async function defenderDeploy( hre: HardhatRuntimeEnvironment, factory: ContractFactory, @@ -85,7 +80,7 @@ export async function defenderDeploy( debug(`Salt: ${opts.salt}`); } - const deploymentRequest: DeployRequest = { + const deploymentRequest: DeployContractRequest = { contractName: contractInfo.contractName, contractPath: contractInfo.sourceName, network: network, @@ -112,6 +107,22 @@ export async function defenderDeploy( } } + if (deploymentResponse.address === undefined) { + throw new UpgradesError( + `Deployment response with id ${deploymentResponse.deploymentId} does not include a contract address`, + () => + 'The Hardhat Upgrades plugin is not currently compatible with this type of deployment. Use a relayer for your default deploy approval process in Defender.', + ); + } + + if (deploymentResponse.txHash === undefined) { + throw new UpgradesError( + `Deployment response with id ${deploymentResponse.deploymentId} does not include a transaction hash`, + () => + 'The Hardhat Upgrades plugin is not currently compatible with this type of deployment. Use a relayer for your default deploy approval process in Defender.', + ); + } + const txResponse = (await hre.ethers.provider.getTransaction(deploymentResponse.txHash)) ?? undefined; const checksumAddress = hre.ethers.getAddress(deploymentResponse.address); return { diff --git a/packages/plugin-hardhat/tsconfig.json b/packages/plugin-hardhat/tsconfig.json index be52e0236..c42543bee 100644 --- a/packages/plugin-hardhat/tsconfig.json +++ b/packages/plugin-hardhat/tsconfig.json @@ -4,7 +4,8 @@ "composite": true, "outDir": "dist", "rootDir": "src", - "resolveJsonModule": true + "resolveJsonModule": true, + "skipLibCheck": true, }, "include": [ "src/**/*" diff --git a/yarn.lock b/yarn.lock index 9fe013ebe..cda223750 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2393,21 +2393,21 @@ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.8.3.tgz#cbef3146bfc570849405f59cba18235da95a252a" integrity sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg== -"@openzeppelin/defender-admin-client@^1.48.0": - version "1.48.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-admin-client/-/defender-admin-client-1.48.0.tgz#acb8d6677a0b1bca463f9017aefaf4b6720123e1" - integrity sha512-MN29JD6jA3PgOxF2tG0aZbMIwOCieYWkK9UbHCq1UzGPrMgGV9NVMUyVdqpv7Ynplwsjp5ZTBDOyttwvTlchHg== +"@openzeppelin/defender-admin-client@^1.52.0": + version "1.52.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-admin-client/-/defender-admin-client-1.52.0.tgz#9788dc839ae1d31c82c57d3e277c1c1ecb149740" + integrity sha512-CKs5mMLL7+nXyugsHaAw0aPfLwFNA+vq7ftuJ3sWUKdbQRZsJ+/189HAwp2/BJC64yUbarEeWqOh3jNpaKRJLw== dependencies: - "@openzeppelin/defender-base-client" "1.48.0" + "@openzeppelin/defender-base-client" "1.52.0" axios "^1.4.0" ethers "^5.7.2" lodash "^4.17.19" node-fetch "^2.6.0" -"@openzeppelin/defender-base-client@1.48.0", "@openzeppelin/defender-base-client@^1.48.0": - version "1.48.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-base-client/-/defender-base-client-1.48.0.tgz#9103b1b036db0451b52d7899a277bf24db4c4b06" - integrity sha512-HFO87s010hRrMjyh2xYOCEAkLe21BfIbho7n5/kikA6A1ZgXi7MsEiqnQv1zP4bxMJgxGZ5b3t4tt6fWrakbag== +"@openzeppelin/defender-base-client@1.52.0", "@openzeppelin/defender-base-client@^1.52.0": + version "1.52.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-base-client/-/defender-base-client-1.52.0.tgz#7a000eeba9705c75e6be5de5d32e07d377aed55d" + integrity sha512-VFNu/pjVpAnFKIfuKT1cn9dRpbcO8FO8EAmVZ2XrrAsKXEWDZ3TNBtACxmj7fAu0ad/TzRkb66o5rMts7Fv7jw== dependencies: amazon-cognito-identity-js "^6.0.1" async-retry "^1.3.3" @@ -2415,21 +2415,21 @@ lodash "^4.17.19" node-fetch "^2.6.0" -"@openzeppelin/defender-sdk-base-client@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-1.2.0.tgz#4ed527939e3b8f0db1bd8a8b35f39effb795c3c8" - integrity sha512-v/nzOABW4RH4wqVPG8gUICV48eZeO0kf6ZvNsd1aUP4i7NyCPv80gErjtW08SFzR/sTqsDN6PS3D+les8mGXvg== +"@openzeppelin/defender-sdk-base-client@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-base-client/-/defender-sdk-base-client-1.5.0.tgz#82d2b45c84822dfadaba8b7cfe215df7ac3c4bec" + integrity sha512-8aN4sEE15/6LctA14ADr8c6QvEzEXfAtFlxo/Ys0N6UVfp8lRAYqDOpHd4mb8dMfkRzq5izMCuMYgAjC9GFflQ== dependencies: - amazon-cognito-identity-js "^6.0.1" + amazon-cognito-identity-js "^6.3.6" async-retry "^1.3.3" -"@openzeppelin/defender-sdk-deploy-client@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-deploy-client/-/defender-sdk-deploy-client-1.2.0.tgz#76381c8f3c2821ec2856e70d1d562d3fbfe7c88d" - integrity sha512-kUBRKMSQiTZ8urP236L68k5X8Eg1ys2FDYMeuJ22GhXFAC2M1l6OaXNFolFBSzmS5t/x8BkJU6+RCyoCqO2qxg== +"@openzeppelin/defender-sdk-deploy-client@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-sdk-deploy-client/-/defender-sdk-deploy-client-1.5.0.tgz#b0bdadc0f00a44c49a3f96e85673394f94f99d6c" + integrity sha512-DbE4Rpa90vSN7o5/sim5qzAVVsSWkZBJ+Z9yjkc8qPRheh2dRk6oe2GhVoQfXI/04XwMb2uNvtfU1VAH8AzgaQ== dependencies: - "@ethersproject/abi" "^5.6.3" - "@openzeppelin/defender-sdk-base-client" "^1.2.0" + "@ethersproject/abi" "^5.7.0" + "@openzeppelin/defender-sdk-base-client" "^1.5.0" axios "^1.4.0" lodash "^4.17.21" @@ -3636,6 +3636,17 @@ amazon-cognito-identity-js@^6.0.1: isomorphic-unfetch "^3.0.0" js-cookie "^2.2.1" +amazon-cognito-identity-js@^6.3.6: + version "6.3.7" + resolved "https://registry.yarnpkg.com/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.7.tgz#65c3d7ee4e0c0a1ffea01927248989c5bd1d1868" + integrity sha512-tSjnM7KyAeOZ7UMah+oOZ6cW4Gf64FFcc7BE2l7MTcp7ekAPrXaCbpcW2xEpH1EiDS4cPcAouHzmCuc2tr72vQ== + dependencies: + "@aws-crypto/sha256-js" "1.2.2" + buffer "4.9.2" + fast-base64-decode "^1.0.0" + isomorphic-unfetch "^3.0.0" + js-cookie "^2.2.1" + ansi-colors@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" From 142c919ca7f33093e13fac1fbf8098391442efb3 Mon Sep 17 00:00:00 2001 From: Eric Lau Date: Tue, 14 Nov 2023 13:48:07 -0500 Subject: [PATCH 2/3] Publish @openzeppelin/hardhat-upgrades@2.4.1 --- packages/plugin-hardhat/CHANGELOG.md | 2 +- packages/plugin-hardhat/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/plugin-hardhat/CHANGELOG.md b/packages/plugin-hardhat/CHANGELOG.md index 81b72e7da..e42063672 100644 --- a/packages/plugin-hardhat/CHANGELOG.md +++ b/packages/plugin-hardhat/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## Unreleased +## 2.4.1 (2023-11-14) - Update Defender SDK. ([#924](https://github.com/OpenZeppelin/openzeppelin-upgrades/pull/924)) - Throw error if not using a relayer for deployments, until other types of deployments are supported. diff --git a/packages/plugin-hardhat/package.json b/packages/plugin-hardhat/package.json index 5181dfd7a..9a1848a09 100644 --- a/packages/plugin-hardhat/package.json +++ b/packages/plugin-hardhat/package.json @@ -1,6 +1,6 @@ { "name": "@openzeppelin/hardhat-upgrades", - "version": "2.4.0", + "version": "2.4.1", "description": "", "repository": "https://github.com/OpenZeppelin/openzeppelin-upgrades/tree/master/packages/plugin-hardhat", "license": "MIT", From 93c9e6fecfe33d318e5a9bdb5d53df6c4d0eaae4 Mon Sep 17 00:00:00 2001 From: Eric Lau Date: Tue, 21 Nov 2023 08:43:38 -0500 Subject: [PATCH 3/3] Test modified compile with multiple namespaces (#927) --- .github/workflows/checks.yml | 1 + .../contracts/test/NamespacedToModify.sol | 6 ++++++ .../core/src/utils/make-namespaced.test.ts | 4 +++- .../core/src/utils/make-namespaced.test.ts.md | 6 ++++++ .../src/utils/make-namespaced.test.ts.snap | Bin 1013 -> 1035 bytes 5 files changed, 16 insertions(+), 1 deletion(-) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 9847444ee..cc26540f6 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -28,6 +28,7 @@ jobs: package: - core - plugin-hardhat + fail-fast: false runs-on: ubuntu-latest diff --git a/packages/core/contracts/test/NamespacedToModify.sol b/packages/core/contracts/test/NamespacedToModify.sol index 91863fc3b..c8c1d0e75 100644 --- a/packages/core/contracts/test/NamespacedToModify.sol +++ b/packages/core/contracts/test/NamespacedToModify.sol @@ -8,6 +8,12 @@ contract Example { uint256 y; } + /// @custom:storage-location erc7201:example.secondary + struct SecondaryStorage { + uint256 a; + uint256 b; + } + /// @notice some natspec function foo() public {} diff --git a/packages/core/src/utils/make-namespaced.test.ts b/packages/core/src/utils/make-namespaced.test.ts index da02b8418..6dbbe56ae 100644 --- a/packages/core/src/utils/make-namespaced.test.ts +++ b/packages/core/src/utils/make-namespaced.test.ts @@ -49,7 +49,9 @@ async function testMakeNamespaced( function normalizeStateVariableNames(input: SolcInput): void { for (const source of Object.values(input.sources)) { if (source.content !== undefined) { - source.content = source.content.replace(/\$MainStorage_\d{1,6};/g, '$MainStorage_random;'); + source.content = source.content + .replace(/\$MainStorage_\d{1,6};/g, '$MainStorage_random;') + .replace(/\$SecondaryStorage_\d{1,6}/g, '$SecondaryStorage_random'); } } } diff --git a/packages/core/src/utils/make-namespaced.test.ts.md b/packages/core/src/utils/make-namespaced.test.ts.md index bdcf08b29..83a23e9aa 100644 --- a/packages/core/src/utils/make-namespaced.test.ts.md +++ b/packages/core/src/utils/make-namespaced.test.ts.md @@ -37,6 +37,12 @@ Generated by [AVA](https://avajs.dev). uint256 x;␊ uint256 y;␊ } MainStorage $MainStorage_random;␊ + ␊ + /// @custom:storage-location erc7201:example.secondary␊ + struct SecondaryStorage {␊ + uint256 a;␊ + uint256 b;␊ + } SecondaryStorage $SecondaryStorage_random;␊ ␊ ␊ ␊ diff --git a/packages/core/src/utils/make-namespaced.test.ts.snap b/packages/core/src/utils/make-namespaced.test.ts.snap index 760ce4135a3d057f59ab08d0d02979f71be5092b..de4bc1ff70b3c9ccb195c1000e2568c2ab735d25 100644 GIT binary patch literal 1035 zcmV+m1oZnsRzV`l`j)?4?rEwp$rDpIVO|0Htf( z(c$3sMjwj^00000000B!RZWi@H5eYxWRo<|W-Cxn9IT~<%|bpJ)Lpb&P|JS6O8bFG zD#3-7GvjRC%-E6bX*X00f&&Lm94dsk6>)-}fZ)QVzXLd+a^WZNjx$LnGaGGJYPm3y zXKcUE`}%op&+|U)c6{OX)ED1V&9qO$fb=NlB%rEKTT-m zei)KNI-Y0=pLt9VEOY^(Zz1B?qNvu4A1Y({Enz7r5lWY;h>-Ib4F5oT4yDN0(`1Us zejOmqG_086Y?}ocnk;xu^fe3ECsZ2KgM_IpLJiy2qCP}mf}04)zQeTq8fM6A07W{Fe_GYcwSSyuA8;duONYM8wzF)%d)FI*xH&j{#tMCGM zT7~ORqBFu&x+~4b)m1ulsRe{_*lp(e6*IC8Vsk7r#vqw z1_zRGPXxgC%;Xe>6g?sbNrtV_Z432H+jm8LpXTxejr{fXaz=7PGz|s`fn*2hJoa4>MCp?)=i`5ShYX-f#AWvgpICR{nuEBxxKUflmSE@6|FQ)4 zW|!b^o~#7_l7PK>Y6)(vjEnG};P@C?@$@2m1t71TUWDHU$i{zGg#WhBT!g>0&RT@w zuGW@8f1j?*nf<@ySk_C>s?HONzzruQ0@TTfz*jK!wR4IH`~ZL-oo6Ki{{jryJp6?V F0067+{1*TK literal 1013 zcmVRzV{cK`<{7tTHP?Rc|Z?nLN5ZOnuSf}V3z^%Ru*>ZsJti6YMOG= z^{HpZb|s^ok|9@SFl9fmQfdEO7^jWq4;7Q1qurof$76fPX*6*A`s(|&4dzm=Xl>mC zHR~}dm++tiN7wHJ8if!;Qsj`y?3n6yGUh_!{8xiW@2|f+c9c zoYvs_ljw{vmF{Azd0~l;OzHt)+*m0sLvXbTykb!K1aH&PPr>QIv2+?H&&iY z=XkDK#Wj2Z+L!UC-67n>i><__x!>zmtIO$tQmxrfE;O7Ega^s^f=BG3)quLWQ~+#1 z#GpJ8BO3Gbqph1y`2a08%oM8{$85|&>a5=(>RQOngEI$I&ggd(5J!SwDsKSj!@~os zC>o8gNlFh<#>41U3yI&r(N)VCtZZ+!J6E?lyF2amt+#jEYa44To$YsHxX-$h$RXZf z-O-xaC|AHw7*ILZ9v9ib4^`*3h#lt=6>^oyh<`q&Dz%iMli%Pu{t5D^kRgD=F~m1h zOx~|$CR)YG2Mvt!9!z~$j2#xPN=b&}UZqkopj!aAodHcxfXap%o{gv>S-~MnAFY{* z-|+?+0_nz8Y#$$4#^9O*SGc%YU(8oD=fVH7qVenjYc3`=?RPMI z2vRz^rkw}Kt0&jAHvzKxpVhR#?5D12Us_LF)8MYw7l42NS(-EZ|AJ##XF+Pt6OzCc jCqn|%$&tWUF!i-_0tx&GfS;Uyiv%766wNAS)CvFq$