Skip to content

Commit

Permalink
Merge pull request #46 from keep-network/upgrade-proxy-issue
Browse files Browse the repository at this point in the history
Extract deployment transaction from upgraded contract

After the proxy contract was upgraded we had a problem with extracting the
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
to the contact's object.
  • Loading branch information
pdyraga authored Jan 24, 2024
2 parents b5fb923 + e077028 commit 92bd5a6
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions src/upgrades.ts
Original file line number Diff line number Diff line change
@@ -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,
Expand Down Expand Up @@ -149,7 +153,13 @@ async function upgradeProxy<T extends Contract>(
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.
// TODO: Remove this workaround once the issue is fixed on the OpenZeppelin side.
// Tracked in: https://github.com/keep-network/hardhat-helpers/issues/49
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.
Expand Down

0 comments on commit 92bd5a6

Please sign in to comment.