UNPKG

@openzeppelin/hardhat-upgrades

Version:

[![Docs](https://img.shields.io/badge/docs-%F0%9F%93%84-blue)](https://docs.openzeppelin.com/upgrades-plugins/hardhat-upgrades) [![NPM Package](https://img.shields.io/npm/v/@openzeppelin/hardhat-upgrades.svg)](https://www.npmjs.org/package/@openzeppelin/h

43 lines (36 loc) • 1.78 kB
import { HardhatRuntimeEnvironment } from 'hardhat/types/hre'; import type { NetworkConnection } from 'hardhat/types/network'; import type { ContractFactory, TransactionResponse } from 'ethers'; import debug from './utils/debug.js'; import { UpgradeProxyOptions, getContractAddress, ContractAddressOrInstance } from './utils/index.js'; import { disableDefender } from './defender/utils.js'; import { attach } from './utils/ethers.js'; import { ContractTypeOfFactory } from './type-extensions.js'; import { makeEthersBinding, contractInfo } from './ethers-binding.js'; import { upgradeProxy as engineUpgradeProxy } from './engine/upgrade-proxy.js'; export type UpgradeFunction = <F extends ContractFactory>( proxy: ContractAddressOrInstance, ImplFactory: F, opts?: UpgradeProxyOptions, ) => Promise<ContractTypeOfFactory<F>>; export function makeUpgradeProxy( hre: HardhatRuntimeEnvironment, defenderModule: boolean, connection: NetworkConnection, log = debug, ): UpgradeFunction { return async function upgradeProxy<F extends ContractFactory>( proxy: ContractAddressOrInstance, ImplFactory: F, opts: UpgradeProxyOptions = {}, ): Promise<ContractTypeOfFactory<F>> { disableDefender(hre, defenderModule, opts, upgradeProxy.name); const proxyAddress = await getContractAddress(proxy); const binding = makeEthersBinding(hre, connection, ImplFactory.runner, opts); const { sent } = await engineUpgradeProxy(binding, proxyAddress, contractInfo(ImplFactory), opts, log); const inst = attach(ImplFactory, proxyAddress); // @ts-ignore Won't be readonly because inst was created through attach. inst.deployTransaction = sent.txResponse as TransactionResponse | undefined; return inst as ContractTypeOfFactory<F>; }; }