Hi, i have transparent proxy contract. I deployed succesfully. But when i try to upgrade the contract i am getting this tx error:
Deployment:
First i deployed proxyAdmin contract then i deployed V1 contract. Then i deployed V2 contract. On V2 contract i have same initialize method.
On upgrade script:
const proxyAdmin = await ethers.getContract("ProxyAdmin");
const ContractV2= await ethers.getContract("ContractV2");
// upgrade the old contract to new contract
const tx = await proxyAdmin.upgrade(proxyAdmin.address, ContractV2.address);
await tx.wait(1);
Code to reproduce
On V1 contract
contract ContractV1 is
Initializable,
PausableUpgradeable,
OwnableUpgradeable,
ReentrancyGuardUpgradeable,
OrderValidator,
Errors
{
/// @custom:oz-upgrades-unsafe-allow constructor
constructor() {
_disableInitializers();
}
function initialize(
address[] memory _paymentTokens,
address treasury,
address _owner
) public initializer {
__Pausable_init();
__Ownable_init();
__ReentrancyGuard_init();
__EIP712_init("Marketplace", "1");
transferOwnership(_owner);
// some logic
}
}
TransparentProxy Contract
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
contract TransparentProxy is TransparentUpgradeableProxy, Ownable {
constructor(
address _logic,
address _admin,
bytes memory _data
) payable TransparentUpgradeableProxy(_logic, _admin, _data) {
transferOwnership(msg.sender);
}
}
contract ContractV2 is
Initializable,
PausableUpgradeable,
OwnableUpgradeable,
ReentrancyGuardUpgradeable,
OrderValidator,
Errors
{
function initialize(
address[] memory _paymentTokens,
address treasury,
address _owner
) public initializer {
__Pausable_init();
__Ownable_init();
__ReentrancyGuard_init();
__EIP712_init("Marketplace", "1");
transferOwnership(_owner);
// same stuff with contractV1
}
Environment
Hardhat