From 5e1fda061dd4a80f65e58dad2e1e3757aa511514 Mon Sep 17 00:00:00 2001 From: Jagoda Berry Rybacka Date: Tue, 23 Jan 2024 13:35:29 +0100 Subject: [PATCH] Extrct deployment transaction from upgraded contract After proxy contract is upgraded we had a problem with extracting deployment transaction via `contract.deploymentTransaction()` from ethers. It was happening because OpenZeppelin's `upgradeProxy` was replacing deployment tx on the proxy contract but the field was different than what ethers function expected. Let's make it work by directly using the field that `upgradeProxy` adds on the contact's object. --- src/upgrades.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/upgrades.ts b/src/upgrades.ts index 6f659b0..580cd8b 100644 --- a/src/upgrades.ts +++ b/src/upgrades.ts @@ -1,6 +1,10 @@ import "@openzeppelin/hardhat-upgrades" -import type { Contract, ContractFactory } from "ethers" +import type { + Contract, + ContractFactory, + ContractTransactionResponse, +} from "ethers" import type { Artifact, FactoryOptions, @@ -149,7 +153,11 @@ async function upgradeProxy( opts?.proxyOpts )) as T - const deploymentTransaction = newContractInstance.deploymentTransaction() + // This is a workaround to get the deployment transaction. The upgradeProxy attaches + // the deployment transaction to the field under a different name than ethers + // contract.deploymentTransaction() function expects. + const deploymentTransaction = + newContractInstance.deployTransaction as unknown as ContractTransactionResponse // Let the transaction propagate across the ethereum nodes. This is mostly to // wait for all Alchemy nodes to catch up their state.