DTeam 技术日志

Doer、Delivery、Dream

Solidity 非权威开发指南(1):端到端全景图

胡键 Posted at — Apr 27, 2022 阅读

作为新坑的第一篇,让我们从了解 solidity 项目的端到端全开发过程开始。

秉承“非权威开发指南”系列的一贯宗旨,本系列不会去纠结 solidtity 的语法细节,所有内容都是从实践中来,也服务于实际工作,同时不说废话。这也是为何个人觉得在第一篇先介绍整个开发过程更有意义,它有助于你了解典型的合约开发工作都有哪些,从而快速建立整体概念。

所谓端到端,其实指以下的工作内容:

以上便是典型合约项目涉及的内容,接下来让我们看看如何完成每一步。

工程创建

软件开发,工具先行,对于合约项目也不例外。对于 solidity 项目,我们选择 hardhat。创建工程的步骤:

  1. 创建项目目录。
  2. 进入目录之后,运行:npx hardhat

此时会出现一个命令行向导,建议直接选择:Create an advanced sample project that uses TypeScript

虽然会装一堆东西,但是它有一个巨大的好处:具备典型项目的架子,且已经配置完好,大多数任务只需修改和调整即可。对于入门者可以大大降低门槛,将精力集中在合约开发之上而非折腾各种配置。即使对于老手,由此开始也能大大省力。

当然,另一种方法就是从 github 上搜寻各类事先配好的模板,直接 fork + clone 即可。

“开发-测试-优化”循环

按上述步骤创建好工程之后,现在手头应该已经有:

不妨先快速浏览一下它们的内容和所在目录,做到心中有数。你所要进行的日常开发就是在对应目录下创建对应的文件,然后执行相关命令即可。鉴于合约和测试代码已经在工程中有示例,这里就不在赘述一个“hello world”了。

运行测试的命令很简单:npx hardhat test

当合约开发完成并通过测试,那么接下来的一个重点就是:优化。“优化”本身有很多含义,比如优化算法,但这里的优化特指:gas 优化。

任何优化,第一步所要做的就是“度量”,在此就是指:得到合约方法的 “gas report”:

  1. npm install hardhat-gas-reporter --save-dev
  2. 安装完毕之后,它会在 hardhat.config.ts 自动引入。
  3. 配置 .env(将示例文件 .env.example 重命名),在其中加上一行:REPORT_GAS=on
  4. 运行 npx hardhat test

如此,在测试完毕之后,它会打印出所有合约方法消耗的 gas report。据此,你就可以开始你的优化之旅了。

注意,hardhat-gas-reporter 会连接外部网络,若嫌它拖慢测试速度,可以在 .env 中关掉它即可。

合约部署

开发和优化完毕,接下来就是部署:

  1. 修改 .env(同样,由 .env.example 重命名而来)中缺省的 rpc urlprivate key
  2. 必要时修改 hardhat.config.ts 中的 networks 参数。
  3. 必要时修改 scripts/deploy.ts
  4. 运行部署命令,示例:npx hardhat run --network rinkeby scripts/deploy.ts,请确保配置文件中有网络配置有 rinkeby

配置到其他 chain(如 mumbai),无非就是:

  1. 修改 .env,添加相应的 rpc url
  2. 修改 hardhat.config.ts 中的 networks 参数,添加对应的网络参数,然后运行 deploy.ts 就行了。

合约验证

整个流程的最后一环是合约验证,这对于大多数初学者会比较陌生。但简单来讲,验证的作用就是:

  1. 能在 etherscan 上合约页面的 Contract Tab 页显示一个验证标记。
  2. 显示合约源码。
  3. 用户可以直接在 etherscan 上调用合约:
    • “Read Contract” 按钮对应读方法
    • “Write Contract” 按钮对应写方法

一般来说,正规的合约项目都会需要用到这一步。验证的步骤:

  1. npm install --save-dev @nomiclabs/hardhat-etherscan
  2. 同样的,在安装完毕之后,它会在配置文件中自动引入。
  3. 修改 .env 中的 ETHERSCAN_API_KEY
  4. 运行 verify 命令,示例:npx hardhat verify --network rinkeby 合约地址 "参数"

完成之后,进入 etherscan 查看效果

参考链接


友情链接


相关文章