在智能合约部署脚本上,被解构为{getNamedAccounts,devployments,getChainId}的对象



以下脚本来自Patrick Collins关于创建NFT的教程。此代码的来源是https://github.com/PatrickAlphaC/all-on-chain-generated-nft/blob/main/deploy/02_Deploy_RandomSVG.js

在部署合约的脚本中,作者使用了类似于以下的模式:

let { networkConfig, getNetworkIdFromName } = require('../helper-hardhat-config')
const fs = require('fs')
module.exports = async ({
getNamedAccounts,
deployments,
getChainId
}) => {
const { deploy, get, log } = deployments
const { deployer } = await getNamedAccounts()
const chainId = await getChainId()
...
...
const VRFCoordinatorMock = await deployments.get('VRFCoordinatorMock')
...
...

我正试图了解的幕后情况

{
getNamedAccounts,
deployments,
getChainId
}

看起来有些对象正在被解包/解构(?(。我找不到任何关于它是什么的文件,或者如果我找到了,它太复杂了,我无法理解。

有人能告诉我这个异步函数要导出到哪里吗?谁需要(即调用(这个函数?

如果以上3个属性是从某个对象中解构出来的,那么那个对象是什么?它如何融入更大的"帽子"图片?

我最近一直在学习Patrick Collins关于FCC的区块链课程,我也有同样的想法。

Hardhat是一个允许您运行和创建任务(如yarn hardhat deploy(的开发环境。然而,您也可以向Hardhat添加插件来扩展其功能。

在本课程中,Patrick使用了hardhat-deploy插件,该插件添加了您试图查找文档的字段。你不会在Hardhat网站上找到任何关于这些字段的文档,因为它没有被烘焙到Hardhat中。以下是插件文档的链接:(

当您运行yarn hardhat deploy时,hardhat-deploy正在执行异步函数。hardhat-deploy插件将运行/deploy中的任何部署脚本。当执行这些函数时,Hardhat将自动将hre对象作为参数传递到函数中。hardhat-deploy通过添加4个新字段来扩展hre对象:

  • getNamedAccounts
  • 获取未命名的帐户
  • getChainId
  • 部署

这些字段的文档可以在我上面链接的文档中找到。

关于传递的对象是什么,这是Hardhat网站上的摘要:;Hardhat运行时环境,简称HRE,是一个包含Hardhat在运行任务、测试或脚本时公开的所有功能的对象。事实上,哈哈特就是HRE">

所以这部分在这里:

module.exports = async ({
getNamedAccounts,
deployments,
getChainId
}) => {

正在导出一个匿名异步函数,该函数将一个对象作为具有这三个键的参数。

这个对象可能看起来像这样,例如:

{
getNamedAccounts: async () => { fetch(...) },
deployments: { get: (name) => { ... } },
getChainId: async () => { fetch(...) }
}

假设导出所在的文件名为DeploymentCoordinator.js,可以从中使用它的一种方式,比如说index.js是:

var coordinator = require('./DeploymentCoordinator.js');
var someResult = await coordinator({
getNamedAccounts: async () => { fetch(...) },
deployments: { get: (name) => { ... } },
getChainId: async () => { fetch(...) }
});

此外,如果你看看这里https://github.com/PatrickAlphaC/all-on-chain-generated-nft/blob/main/test/RandomSVG_test.js您可以看到,至少部署和getChainId似乎只是来自顶部为const { deployments, getChainId } = require('hardhat')

相关内容

  • 没有找到相关文章

最新更新