Javascript

如何使用 hardhat-deploy 在腳本/任務中與已部署的合約進行互動

  • October 23, 2021

在我的安全帽項目中,我的文件夾結構如下所示。

scripts/
└── enter.ts
deploy
└── 01_Deploy_Raffle.ts

在我使用 hardhat deploy(我的另一個部署腳本)部署契約後,我可以使用該get命令獲取最近部署的地址。

const deployRaffle: DeployFunction = async function (
 hre: HardhatRuntimeEnvironment
) {
 const { deployments, getNamedAccounts, getChainId } = hre
 const { deploy, log, get } = deployments

但是,當我在部署文件夾之外使用它時,我似乎遇到了問題。當我將部署執行到本地區塊鏈時,Hardhat-deploy 可能不會保存部署。因此,我將執行npx hardhat node(執行部署文件夾中的腳本),然後嘗試下面概述的腳本:

import { run, ethers, deployments } from 'hardhat'

async function main() {
 await run('compile')
 const { get } = deployments
 const accounts = await ethers.getSigners()
 const Raffle = await ethers.getContractFactory('Raffle')
 const RaffleDeployment = await get('Raffle')
 const raffle = new ethers.Contract(RaffleDeployment.address, Raffle.interface, accounts[0])
 console.log(raffle.s_entranceFee()) // this line errors
}

我收到以下錯誤:

Error: No deployment found for: Raffle
   at get (/Users/patrick/code/decentralized-raffle/node_modules/hardhat-deploy/src/DeploymentsManager.ts:150:17)
   at processTicksAndRejections (internal/process/task_queues.js:95:5)
   at async main (/Users/patrick/code/decentralized-raffle/scripts/enter.ts:11:28)

那麼使用 hardhat-deploy 編寫腳本的最佳方法是什麼?

安全帽部署的常見“陷阱”。--network localhost在本地使用自己的安全帽節點執行腳本時必須使用。

預設網路是其他hardhat網路。

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