当前位置:首页 > 物联网 > 区块链
[导读] 为您的智能合约编写单元测试非常重要,就像为任何开发项目编写代码一样。然而,基于区块链的解决方案中的单装置测试常常被低估和忽视。去年,我对大部分为以太坊以及Neo、Eos、Tron和比特币区块链撰

为您的智能合约编写单元测试非常重要,就像为任何开发项目编写代码一样。然而,基于区块链的解决方案中的单装置测试常常被低估和忽视。去年,我对大部分为以太坊以及Neo、Eos、Tron和比特币区块链撰写的智能合约进行了200多次审计。根据我的观察,这些项目中有将近一半没有编写装置测试。这种监督常常导致合同执行情况不佳,以及审计过程中发现的各种安全问题。


 

必备的测试

每个智能合约都有一些共同的部分,比如构造函数、总供应、用于来回传输的函数、用于审批的函数,有时还有用于燃烧额外代币的函数。因此,检查您的智能合约是否正确初始化所有参数,以及当您溢出总供应或其他装置值时是否能及时返回,都是非常重要的。您还需要检查修饰符和正确的权限使用。

在这里,我们将以以太坊为例,但这也适用于其他平台,因为合约往往具有相同的结构。首先,让我们测试适当的代币初始化和对某个地址的正确传输。

正确初始化的测试很简单。您只需要创建一个示例合约并检查所有必须初始化的值的正确性即可。

检查传递函数是非常重要的,因为可能会有一些问题会导致不正确的传递。您必须确保接收方和发送方的平衡,试图得到恢复以防被错误的函数参数所影响,例如,发送数量超过发送方的平衡,合同地址或无效的地址进行了发送等等情况都有可能发生。最后, 您必须检查从传输事件获得正确的日志。

transferFrom函数非常类似于transfer,但是这里您还需要测试spender是否有足够经过批准的余额来发送。以下是在支出比所需资金少的情况下进行的测试。

approve函数是ERC20标准中最简单的函数。不需要检查零地址,只要检查津贴数组是否正确填充就足够了。另外,如果您没有增加审批或减少审批功能,approve将覆盖所有先前的值。因此,我们建议使用这些函数来防止不必要的覆盖。当然,检查从审批事件中获得正确日志是很重要的。

大多数智能合约都包含了一个函数,用于燃烧主销售后遗留的代币。它们中的许多都有一个特殊的代币持有者帐户,有时是所有者帐户。因此,对于燃烧未售出的代币,最好的解决方案是:获取持有者地址上的代币数量,然后从总供应中减去这个数量,并将代币数量设置为零。这将确保您不会烧掉所有的代币,因此在白纸上列出代币燃烧策略是很重要的。

结论

在将智能合约部署到主网络之前,测试它是非常重要的,以防止将来出现问题。当您编写了装置测试时,它们将保证您的白皮书和智能合约之间不会有任何差异,并且您的智能合约不会被调用功能所攻击。

一段时间以来,我听到的最佳编程访谈引语是:“在装置测试完成之前,代码不会先完成。——@brianrivard

这不仅仅是只关于智能合约,你需要为你的所有应用和代码进行装置测试,因为它向你展示了你的应用可能如何失败的所有方式。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭