风险提示:理性看待区块链,提高风险意识!
如何编写以太坊ERC-20智能合约的单元测试
首页 > 币界资讯 > 区块链知识 2019-03-07 21:05:01
币界网报道:

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

必备的测试

每个智能合约都有一些共同的部分,比如构造函数、总供应、用于来回传输的函数、用于审批的函数,有时还有用于燃烧额外代币的函数。因此,检查您的智能合约是否正确初始化所有参数,以及当您溢出总供应或其他装置值时是否能及时返回,都是非常重要的。您还需要检查修饰符和正确的权限使用。在这里,我们将以以太坊为例,但这也适用于其他平台,因为合约往往具有相同的结构。首先,让我们测试适当的代币初始化和对某个地址的正确传输。正确初始化的测试很简单。您只需要创建一个示例合约并检查所有必须初始化的值的正确性即可。检查传递函数是非常重要的,因为可能会有一些问题会导致不正确的传递。您必须确保接收方和发送方的平衡,试图得到恢复以防被错误的函数参数所影响,例如,发送数量超过发送方的平衡,合同地址或无效的地址进行了发送等等情况都有可能发生。最后, 您必须检查从传输事件获得正确的日志。transferFrom函数非常类似于transfer,但是这里您还需要测试spender是否有足够经过批准的余额来发送。以下是在支出比所需资金少的情况下进行的测试。approve函数是ERC20标准中最简单的函数。不需要检查零地址,只要检查津贴数组是否正确填充就足够了。另外,如果您没有增加审批或减少审批功能,approve将覆盖所有先前的值。因此,我们建议使用这些函数来防止不必要的覆盖。当然,检查从审批事件中获得正确日志是很重要的。大多数智能合约都包含了一个函数,用于燃烧主销售后遗留的代币。它们中的许多都有一个特殊的代币持有者帐户,有时是所有者帐户。因此,对于燃烧未售出的代币,最好的解决方案是:获取持有者地址上的代币数量,然后从总供应中减去这个数量,并将代币数量设置为零。这将确保您不会烧掉所有的代币,因此在白纸上列出代币燃烧策略是很重要的。

结论

在将智能合约部署到主网络之前,测试它是非常重要的,以防止将来出现问题。当您编写了装置测试时,它们将保证您的白皮书和智能合约之间不会有任何差异,并且您的智能合约不会被调用功能所攻击。一段时间以来,我听到的最佳编程访谈引语是:“在装置测试完成之前,代码不会先完成。——@brianrivard

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

上一篇: 什么是区块链(BlockChain)
下一篇: 什么是时间扭曲(Timewarp)攻击?
推荐专栏
Boss Wallet Web3 Econom Pass
专注币圈最新资讯
通俗浅显地聊透Web3大事小情
读懂区块链生态与未来,尽在币界网!
热门币种
更多
币种
美元价格
24H涨跌幅
BTC比特币
60,963.61 USDT
¥435,103.38
-2.72%
ETH以太坊
3,368.69 USDT
¥24,042.67
-0.3%
BNB币安币
570.68 USDT
¥4,073.00
-0.28%
USDT泰达币
1.02 USDT
¥7.25
-0.19%
SOL
135.96 USDT
¥970.36
+7.66%
USDC
1.00 USDT
¥7.15
-0.01%
TON
7.59 USDT
¥54.14
+4.55%
XRP瑞波币
0.47720 USDT
¥3.41
+0.48%
DOGE狗狗币
0.12210 USDT
¥0.87140
+2.43%
ADA艾达币
0.39050 USDT
¥2.79
+3.88%
热搜币种
更多
币种
美元价格
24H涨跌幅
比特币
60962.19 USDT
¥442,884.21
-1.67%
Solana
137 USDT
¥995.29
-1.28%
Filecoin
4.3427 USDT
¥31.55
-2.63%
柚子
0.5716 USDT
¥4.15
-0.8%
Curve
0.2963 USDT
¥2.15
-6.88%
Terra Classic
8.216E-5 USDT
¥0.00
-0.98%
Shiba Inu
1.72E-5 USDT
¥0.00
-3.91%
Conflux
0.1563 USDT
¥1.14
-1.76%
狗狗币
0.1221 USDT
¥0.89
-4.16%
dYdX
1.3771 USDT
¥10.00
-1.76%
Arweave
25.8763 USDT
¥187.99
-10.41%
Uniswap
9.3568 USDT
¥67.98
-1.93%
最新快讯
更多
Symbiotic:sUSDe已达质押上限
2024-06-27 11:05:48
全网BTC期权未平仓头寸为209.2亿美元,ETH期权未平仓头寸为92.4亿美元
2024-06-27 11:04:11
全网ETH合约未平仓头寸超150亿美元
2024-06-27 11:02:28
币安完成MetalDAO(MTL)主网置换,并开放充提业务
2024-06-27 11:01:27
DeFianceCapital联创称BLASTFDV远不及其至少50亿美元的预期
2024-06-27 11:00:51
Gate.io首席安全官提出5项用户必知安全措施,共筑安全防线
2024-06-27 10:57:30
澳大利亚广播公司的YouTube账号遭劫持用来推销加密骗局
2024-06-27 10:52:09
下载币界网APP