I am trying to deploy pancakeSwapv3 contracts on goerli network. I have been able to do it successfully on hardhat network and also on BSCtestnet, using the pre existing deploy script provided in the repository.
However, when running the deploy script on Goerli, a few of the contracts get deployed succesfully then i get this error :
C:\Users\****\Desktop\pancakev3\pancake-v3-contracts\node_modules\.bin\hardhat run scripts/deploy2.ts --network goerli
owner 0x6A0FEb874D3C7448e6b1d9F7a0B4A60A664c8011
swapRouter 0x3Ddc55412c7fe6EC3650Ad7206bA34c62b6057e8
nonfungibleTokenPositionDescriptor 0x8abfCEB7b172899cD90f39EAc2004F3788C57bF6
nonfungiblePositionManager 0x07b95D428999FaA743f1311eC0DDEA0fd818a1aE
ProviderError: INTERNAL_ERROR: could not replace existing tx
at HttpProvider.request (C:\Users\****\Desktop\pancakev3\pancake-v3-contracts\node_modules\hardhat\src\internal\core\providers\http.ts:88:21)
at processTicksAndRejections (node:internal/process/task_queues:95:5)
at EthersProviderWrapper.send (C:\Users\****\Desktop\pancakev3\pancake-v3-contracts\node_modules\@nomiclabs\hardhat-ethers\src\internal\ethers-provider-wrapper.ts:13:20)
error Command failed with exit code 1.
What could be the cause of this error? and why is etherscan considering that i am replacing a transaction? here is the deploying script until the point of failure(to save space):
import bn from 'bignumber.js'
import { Contract, ContractFactory, utils, BigNumber } from 'ethers'
import { ethers, upgrades, network } from 'hardhat'
import { linkLibraries } from '../util/linkLibraries'
import { tryVerify } from '@pancakeswap/common/verify'
import { configs } from '@pancakeswap/common/config'
import fs from 'fs'
type ContractJson = { abi: any; bytecode: string }
const artifacts: { [name: string]: ContractJson } = {
QuoterV2: require('../artifacts/contracts/lens/QuoterV2.sol/QuoterV2.json'),
TickLens: require('../artifacts/contracts/lens/TickLens.sol/TickLens.json'),
V3Migrator: require('../artifacts/contracts/V3Migrator.sol/V3Migrator.json'),
PancakeInterfaceMulticall: require('../artifacts/contracts/lens/PancakeInterfaceMulticall.sol/PancakeInterfaceMulticall.json'),
// eslint-disable-next-line global-require
SwapRouter: require('../artifacts/contracts/SwapRouter.sol/SwapRouter.json'),
// eslint-disable-next-line global-require
NFTDescriptor: require('../artifacts/contracts/libraries/NFTDescriptor.sol/NFTDescriptor.json'),
// eslint-disable-next-line global-require
NFTDescriptorEx: require('../artifacts/contracts/NFTDescriptorEx.sol/NFTDescriptorEx.json'),
// eslint-disable-next-line global-require
NonfungibleTokenPositionDescriptor: require('../artifacts/contracts/NonfungibleTokenPositionDescriptor.sol/NonfungibleTokenPositionDescriptor.json'),
// eslint-disable-next-line global-require
NonfungibleTokenPositionDescriptorOffChain: require('../artifacts/contracts/NonfungibleTokenPositionDescriptorOffChain.sol/NonfungibleTokenPositionDescriptorOffChain.json'),
// eslint-disable-next-line global-require
NonfungiblePositionManager: require('../artifacts/contracts/NonfungiblePositionManager.sol/NonfungiblePositionManager.json'),
}
bn.config({ EXPONENTIAL_AT: 999999, DECIMAL_PLACES: 40 })
function encodePriceSqrt(reserve1: any, reserve0: any) {
return BigNumber.from(
// eslint-disable-next-line new-cap
new bn(reserve1.toString())
.div(reserve0.toString())
.sqrt()
// eslint-disable-next-line new-cap
.multipliedBy(new bn(2).pow(96))
.integerValue(3)
.toString()
)
}
function isAscii(str: string): boolean {
return /^[\x00-\x7F]*$/.test(str)
}
function asciiStringToBytes32(str: string): string {
if (str.length > 32 || !isAscii(str)) {
throw new Error('Invalid label, must be less than 32 characters')
}
return '0x' + Buffer.from(str, 'ascii').toString('hex').padEnd(64, '0')
}
async function main() {
const [owner] = await ethers.getSigners()
const networkName = network.name
console.log('owner', owner.address)
const config = configs[networkName as keyof typeof configs]
if (!config) {
throw new Error(`No config found for network ${networkName}`)
}
const deployedContracts = await import(`@pancakeswap/v3-core/deployments/${networkName}.json`)
const pancakeV3PoolDeployer_address = deployedContracts.PancakeV3PoolDeployer
const pancakeV3Factory_address = deployedContracts.PancakeV3Factory
const SwapRouter = new ContractFactory(artifacts.SwapRouter.abi, artifacts.SwapRouter.bytecode, owner)
const swapRouter = await SwapRouter.deploy(pancakeV3PoolDeployer_address, pancakeV3Factory_address, config.WNATIVE)
// off chain version
const NonfungibleTokenPositionDescriptor = new ContractFactory(
artifacts.NonfungibleTokenPositionDescriptorOffChain.abi,
artifacts.NonfungibleTokenPositionDescriptorOffChain.bytecode,
owner
)
const baseTokenUri = 'https://nft.pancakeswap.com/v3/'
const nonfungibleTokenPositionDescriptor = await upgrades.deployProxy(NonfungibleTokenPositionDescriptor, [
baseTokenUri,
])
await nonfungibleTokenPositionDescriptor.deployed()
console.log('nonfungibleTokenPositionDescriptor', nonfungibleTokenPositionDescriptor.address)
// await tryVerify(nonfungibleTokenPositionDescriptor)
const NonfungiblePositionManager = new ContractFactory(
artifacts.NonfungiblePositionManager.abi,
artifacts.NonfungiblePositionManager.bytecode,
owner
)
const nonfungiblePositionManager = await NonfungiblePositionManager.deploy(
pancakeV3PoolDeployer_address,
pancakeV3Factory_address,
config.WNATIVE,
nonfungibleTokenPositionDescriptor.address
)
I have tried adding a big gas limit in my hardhat.config
const goerli: NetworkUserConfig = {
url: 'https://rpc.ankr.com/eth_goerli',
chainId: 5,
accounts: [process.env.KEY_GOERLI!],
gasPrice: 1000000000, // 1 gwei
gas: 8000000,
}
which gives me the error...
info Visit https://yarnpkg.com/en/docs/cli/workspace for documentation about this command.
Error: Error: overflow [ See: https://links.ethers.org/v5-errors-NUMERIC_FAULT-overflow ] (fault="overflow", operation="BigNumber.from", value=1e+27, code=NUMERIC_FAULT, version=bignumber/5.7.0)
at Logger.makeError (C:\Users\****\Desktop\pancakev3\pancake-v3-contracts\node_modules\@ethersproject\logger\src.ts\index.ts:269:28)