链上DAPP系统开发|智能合约DAPP开发搭建

链上DAPP系统开发|智能合约DAPP开发搭建

  发布合约的字节码到某个区块链网络,网络地址和deployer账户,这些我们可以在hardhat.config.js文件中配置。  整合插件:  hardhat工作流还支持插件机制,插件能够将特定逻辑作为hook function(钩子函数)插入到对应的task(任务)当中,所以,当我们执行某个任务时,需要确认它是否依赖了某个插件,否则它可能有与预期不同的行为。  引入插件的方式是,首先使用npm安装这个插件,DAPP智能合约13z开4z77发z558,再于hardhat.config.js配置文件头部引入即可。  HRE运行环境变量:  当我们在JS文件中引入hardhat时,HRE会被插入运行环境。一些插件可能会拓展HRE,将他们的实用函数方法插入到HRE中,类似地,我们也可以使用这种方法构建特定的hardhat插件。但一般来说,我们不需要这么做。  HRE会在我们执行npx hardhat run任务时被自动插入到全局变量中去,我们可以通过这种方法编写某些简单的合约发布脚本或合约交互脚本。  3.2单元测试  编写合约的第二步是编写合约的单元测试。当我们运行npx hardhat test任务时,hardhat会自动寻找./test文件夹下的单元测试并运行它们。这个默认的地址可以在hardhat.config.js配置文件中使用path.tests修改:  //Rewrite the./test folder to./tests  paths:{  tests:‘./tests’,  },  运行测试所需要安装的依赖可以在这个指南上找到:  与传统的单元测试一样,使用Mocha作为单元测试框架。对于合约特定的变量类型,我们使用Waffle和chai作为断言库。  一般来说,我们在hardhat.config.js配置文件头部引入测试辅助插件 nomiclabs/hardhat-waffle可以帮助我们解决大部分问题,而不需要额外手动安装mocha,waffle和chai并进行配置,与前一小节所提到的HRE相关,它们会被自动插入HRE运行环境。  关于合约事件,合约方法调用,BigNumber等完整的断言库范例可以在这个文档中找到:  注意:合约的单元测试中可以使用contractInstance.connect(signer)来随意改变调用合约的外部账户。  3.3改善测试效率  编写单元测试首先需要我们在测试钩子中编写发布合约的代码,这意味着,我们需要在每次beforeEach钩子中重新发布我们的合约并使其从零状态开始运行。  即使hardhat支持在内存中运行区块链并整合了单元测试流程,但这样反复的发布合约也会极大拖慢测试速度。  因此,就单元测试的最佳实践,我向大家推荐hardhat-deploy插件。  hardhat-deploy插件支持使用evm_snapshot快速地跳转到某个高度的区块链状态,因此,我们可以使用它在单元测试中维护测试前、中、后以及各种特定高度状态,极大地加快测试速度。  注意,引入hardhat-deploy插件,需要修改对应的 nomiclabs/hardhat-ethers插件来源,这可能会导致在未来的npm install中带来版本冲突,如果你遇到了版本冲突,可以使用npm install–force跳过版本依赖检查,强制安装两者。  “devDependencies”:{  “ nomiclabs/hardhat-ethers”:“npm:hardhat-deploy-ethers”,  “hardhat-deploy”:“^0.11.2”,  …  }  简单来说,在单元测试中,我们可以使用:  await deployments.fixture([‘SomeContractName’]);  来确保在测试执行前跳回某个状态。如果你需要更加复杂和自定义的fixture(而非直接跳回某个合约发布后的干净状态)可以使用deployments.createFixture来创建自定义fixture,具体的范例代码和指南可以在这里寻找到:  值得注意的是,使用hardhat-deploy插件会同时改变我们发布合约的代码逻辑(正如其名)它支持在./deploy文件夹下编写每个合约的发布脚本。事实上,默认的deployments.fixture正会退回这些发布脚本所叙述的合约状态。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Proudly powered by WordPress | Theme: HoneyWaves by SpiceThemes