2

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

 2 years ago
source link: https://blog.dteam.top/posts/2022-04/solidity-indefinitive-guide-part1.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

胡键 Posted at — Apr 27, 2022 阅读 17

作为新坑的第一篇,让我们从了解 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 查看效果


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK