我有下面的代码
const SimpleStorageFactory = await ethers.getContractFactory(
"SimpleStorage"
)
const simpleStorage = await SimpleStorageFactory.deploy()
await simpleStorage.deployed()
await simpleStorage.deployTransaction.wait(6)
据我所知,hardhat的getContractFactory会自动提供abi、二进制和指定的私钥,用于签署事务。完成后,我假设SimpleStorageFactory.deploy()与ethers中的相同,并将合同部署到区块链,然后我正在等待6个网络确认。然而,我很困惑为什么安全帽一直在等待simpleStorage.deployed(),这是怎么回事?
我试着阅读了安全帽上的文档,但没有找到答案。
await simpleStorage.deployed()
代码行正在等待SimpleStorage
合约部署到以太坊网络。当部署一个合约时,它会被上传到网络,并可用于交互。
deployed()
方法是一个Promise,它返回一个ContractReceipt
对象,该对象包含有关部署事务的信息,例如事务哈希、块号和契约地址。
此方法非常有用,因为它允许您在尝试调用其任何方法或访问其状态之前,确保契约已部署并可用于交互。如果没有这一行,其余的代码可能会在合同完全部署之前执行,这可能会导致错误。
await simpleStorage.deployTransaction.wait(6)
代码行正在等待部署事务被包括在以太坊区块链上的六个区块中。这样做是为了确保交易有足够的确认,这有助于确保交易不会被撤销。
这个hardhat插件添加了一种机制,可以将契约部署到任何网络,跟踪它们并复制相同的环境进行测试。