un.Block

Posted on Oct 09, 2021Read on Mirror.xyz

设置合约开发环境

在第一次 Workshop 中,我们为大家介绍了如何使用 Remix,实现一个标准的 ERC20 智能合约,并将其发布到 Rinkeby 测试网上。错过这次 Workshop 的读者可以阅读我们*详细的实验手册*。

Remix

Remix 兼具开发,测试,调试,部署等功能。由于它支持在 GUI 中调用智能合约,一键切换账户等功能,Remix 非常适合用来调试智能合约。

Truffle

当你写的合约越来越复杂后,Truffle 是你最好的伙伴。

Truffle 是一个合约开发工具,在不干涉实际智能合约代码编写的情况下,Truffle 提供部署,测试等命令行工具。你也可以在 Truffle 的配置文件中,定义具体要使用的编译器版本,各种网络设置等。有了配置好的网络,你就可以将合约部署或者在这些预先配置好的网络上进行测试。

执行 truffle console,便可以在本地启动一条区块链,并在命令行中进行交互。命令行中部署,测试常用的代码片段可以参考*这个笔记*。

我个人其实并不喜欢 Truffle,因为它给我带来过一些修也修不好的奇怪 bug。但相比以下的几个工具,Truffle 的优点在于大而全,部署功能比其他的工具做的好。

Hardhat

Hardhat 和 Truffle 做着类似的事情但是理念不一样。Hardhat 的感觉更是小而精简,大多数功能考插件完成,这就导致整体使用体验没有 Truffle 那么一致。

对我来说,我最喜欢 Hardhat 的地方在于它的易用性,想用多少功能就用多少功能。Hardhat 还有一个杀手锏功能,console.log()。写过较大的智能合约的读者或许可以理解这样一个在 Node.js 中司空见惯的调试工具,在区块链开发中是多么珍贵。在 Hardhat 下,我们终于可以随你所欲的打印变量。

Hardhat 的部署并没有 Truffle 那么简单。具体部署,测试常用的代码片段可以参考*这个笔记*。

Openzeppelin

开发复杂的智能合约绝对离不开 Openzeppelin 的各种库。在 Solidity v0.8 之前,几乎所有的智能合约都会使用 Openzeppelin 的 "https://docs.openzeppelin.com/contracts/4.x/api/utils#SafeMath">Safemath 库来保证计算不会出现溢出的情况。常见的实现代币,权限控制,数组的一些操作等,都可以在 Openzeppelin 中找到你需要的。

Slither

Slither 是目前智能合约开发中最为流行的静态检查工具,它可以帮助开发者写出更加安全的代码。

但是你看看互联网安全使用的静态检查工具,就会感到 Slither 的简陋的了。Slither 使用 AST,而互联网安全已经出现了经历了 IR/CFG 和 QL。这至少比 Slither 快了两个世代。关于静态代码审计的技术方向可以参考*这篇文章*。

Etheres.js

如果想要和钱包,以太坊,链上合约交互,Etheres.js 是一种选择。虽然官网有较为详细的文档,但我总是为找不到我想要的例子发愁。调试这个是一个痛苦的过程。等我整理好了常用的代码片段,会贴在这里。

Create-smart-contract

懒得一个个安装以上工具的读者,可以使用我开发的 create-smart-contract。类似 create-react-app,帮助各位读者一键安装各种库,初始化配置文件等。

最后我们希望各位有兴趣的读者都可以动手试一试,在未来我们会为各位带来一些智能合约开发上的小技巧。