Contract-Deployment
修改合約並使用安全帽將其部署到新地址
我是 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
在開發模式下,它在你的部署腳本的多次執行之間保持執行,你會看到每次創建不同的地址,因為同一個使用者用於部署新的智能合約並且隨機數增加。請參閱如何計算乙太坊合約的地址?更多細節。