Contract-Deployment

修改合約並使用安全帽將其部署到新地址

  • February 4, 2022

我是 Solidity 的新手,我正在使用安全帽作為開發環境。

我想更改我的契約程式碼並使用新地址進行部署,只是為了開發目的,但每次我更改一些程式碼並使用npx hardhat run --network hardhat scripts/deploy.js. hardhat 給了我相同的契約地址,我知道我的修改不適用於新契約。有人可以解釋如何做到這一點嗎?

這是我的部署腳本:

async function main() {
 const NFTMarket = await hre.ethers.getContractFactory("NFTMarket");
 const nftMarket = await NFTMarket.deploy();
 await nftMarket.deployed();
 console.log("nftMarket deployed to:", nftMarket.address);

 const NFT = await hre.ethers.getContractFactory("NFT");
 const nft = await NFT.deploy(nftMarket.address);
 await nft.deployed();
 console.log("nft deployed to:", nft.address);

 let config = `
 export const nftmarketaddress = "${nftMarket.address}"
 export const nftaddress = "${nft.address}"
 `

 let data = JSON.stringify(config)
 fs.writeFileSync('config.js', JSON.parse(data))
}

這是我每次收到的契約地址(每次都一樣):

 export const nftmarketaddress = "0x5FbDB2315678afecb367f032d93F642f64180aa3"
 export const nftaddress = "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512"

合約地址不是由其內容決定的;它是根據發送者的地址和交易的地址確定性地計算出來的nonce

每次執行腳本時,您都使用相同的發件人(測試地址)和相同的隨機數 ( 0),因此會計算相同的地址。

如果你使用一個單獨的節點,比如說geth在開發模式下,它在你的部署腳本的多次執行之間保持執行,你會看到每次創建不同的地址,因為同一個使用者用於部署新的智能合約並且隨機數增加。

請參閱如何計算乙太坊合約的地址?更多細節。

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