solidity智能合约开发的误区

随着区块链的风生水起,越来越多的软件工程师转向区块链的开发。几乎所有的智能合约工程师都是从软件工程师转型而来,他们同时也将固有的思维和开发模式带入这个领域。由于智能合约与传统软件的相似性,很多做法也的确可以直接套用,不过由于智能合约的特性,也有一些做法却不能生搬硬套,本文仅列举一二以抛砖引玉,希望引起人们的思考。


solidity智能合约开发的误区_第1张图片

误区之一:简单。


由于目前的智能合约功能还都比较基础,智能合约反映在代码量上都比较短小,看起来也比较简单,因此很多人可能就会认为智能合约也就是几百行代码而已,与传统软件动则十几万行代码相比简直是小儿科。而事实却并不如此。

由于以太坊上运行任何一个改变数据状态的操作都要消耗一定的费用,智能合约的每个函数都需要仔细斟酌,甚至每行代码都很重要,实际上,在传统软件中经常使用的循环语句在智能合约中很少使用。

另外,由于智能合约代码一般都是公开的,若代码的漏洞被不怀好意者发现所造成的震动很可能会导致整个项目失败。而合约之间互相调用导致的复杂场景更是让安全防护变得异常困难,这也是一个初中级工程师根本没有办法应对的。

更进一步,由于智能合约的升级困难,即使只有一个简单的业务逻辑的智能合约在规划设计时也要考虑到很多管理逻辑,这些管理逻辑通常都要超过作为用户接口的业务逻辑,而这些都需要在提前计划周密,后面很少能有修改的机会。

因此,与传统软件相比,智能合约属于知识密集型,工作量很小,但写好一个智能合约的挑战性通常远大于传统软件。


误区之二:自动化测试。



solidity智能合约开发的误区_第2张图片

为了应对频繁的修改与发布,在互联网领域,自动化测试发挥了巨大的作用。由于智能合约工程师都是之前的软件工程师转型而来,很多人也给智能合约加上了测试脚本以方便回归测试,但这些测试脚本之后很少用到,原因是智能合约一旦发布很少会升级。即便升级,通常的case也需要大幅修改才能应对新的合约功能,回归测试用的脚本基本不会有机会使用,手工测试比专门实现一套脚本成本更低。同时,合约升级本身就不能做到平滑升级,升级合约就不可避免的停止合约层面的服务。所以,其实智能合约并不需要自动化和脚本化的测试。 


误区之三:套用互联网的安全观


我们都明白,互联网产品的漏洞往往会造成很大损失,因此,人们在互联网领域已经构筑起了足够坚实的安全工事,一般的软件工程师基本不用深入安全领域。从而,对于智能合约,工程师也延续了互联网的安全观。而在智能合约领域,安全的重要程度却更高了。正如前文所说,公开的代码让漏洞传播更快,而很多智能合约都和token相关。安全漏洞导致一个优质项目瞬间整体失败的案例已经比比皆是。智能合约需要在短小的代码里实现逻辑并确保任何场景下的安全可控,它的外面也不像互联网产品通常都有层层安全防护,通常都是直接暴露给所有人的,再加上复杂的调用场景,智能合约的安全正在给工程师们带来前所未有的挑战,对待智能合约,人们也需要一套新的安全观。

你可能感兴趣的:(solidity智能合约开发的误区)