Hardhat

Hardhat - 本地網路在同一地址部署合約

  • July 6, 2022

當我嘗試在安全帽 localhost 上部署契約並部署兩個契約時,他們最終獲得了相同的地址

這就是我執行安全帽的方式

test@test:~/test$ npx hardhat node       
Started HTTP and WebSocket JSON-RPC server at http://127.0.0.1:8545/

這就是我部署的方式

test@test:~/test$ npx hardhat run scripts/First/local/deploy.js
Contract successfully deployed. Contract address 0x5FbDB2315678afecb367f032d93F642f64180aa3
test@test:~/test$ npx hardhat run scripts/Second/local/deploy.js 
Contract successfully deployed. Contract address 0x5FbDB2315678afecb367f032d93F642f64180aa3

這是部署腳本(兩個合約都相似)

const { ethers } = require("hardhat")

async function main() {

   [owner] = await hre.ethers.getSigners()

   const TestNFT = await ethers.getContractFactory("TestNFT", owner)
   const testNFT = await TestNFT.deploy("TestNFT", "TNFT")

   await TestNFT.deployed()
   console.log(
       `Contract successfully deployed. Contract address ${testNFT.address}`
   )
}

main()
   .then(() => process.exit(0))
   .catch((error) => {
       console.error(error)
       process.exit(1)
   })

不知道為什麼會這樣,但每個契約應該有不同的地址……對吧?

因此,您正在嘗試使用 執行 Hardhat 區塊鏈npx hardhat node,連接到它並向其部署兩個合約。

這取決於您的 Hardhat 網路配置,但我的猜測是部署根本沒有使用您正在執行的節點。檢查它是否在這些發生時列出了部署。我的猜測是您使用的是安全帽區塊鏈,該區塊鏈僅為部署而啟動,然後立即終止。而且由於它是重新啟動的,它以相同的設置開始並為您提供相同的第一個合約地址(從區塊鏈的角度來看,兩個合約都是新的,因為它已重新啟動)。

我想您應該能夠簡單地使用--network localhost設置來定位正在執行的節點,如下所述:https ://hardhat.org/guides/deploying

引用自:https://ethereum.stackexchange.com/questions/131295