微信
手机版
网站地图

觉醒,pat-PDD 援建的「皮皮欢乐希望小学」竣工

2019-12-15 08:51:34 投稿人 : admin 围观 : 109 次 0 评论

在本文中,我将共享一些示例,阐明消除特别西加米状况如何削减代码觉悟,pat-PDD 援建的「皮皮欢喜期望小学」竣工复杂性并进步可保护性。

特别最大值

常见的特别状况是运用0表明“无最大值”。这种特别状况一般很简略消除。

S觉悟,pat-PDD 援建的「皮皮欢喜期望小学」竣工pecial Expirations

看下面的代码

在这段代码中,0是g8010一种特别状况,表明“没有过期”。这宫兰芳种特别状况是不直观的,它增加了require句子的复杂性。

可是,真实的风险是团队中的刘崧传一个新开发人员疏忽了这个奇妙之处,无法处理expiration==0的特别状况。这很简略导致资林铄泓金丢失或其他严重问题。

这样代码就寒冰暗潮更简略更显着了:

这儿,我运用的是uint256答应的最大值的expiration,而不是0,当触及到时刻戳时,expiration实际上觉悟,pat-PDD 援建的「皮皮欢喜期望小学」竣工是无限的。

特别最大以太币数量

这是一个十分类似的示例,但这次触及以太币:

相同,咱们有一个非直观的特例,咱们能够经过运用一个有用的无限值来处理这个问题:

2256-1是最大值

留意,相同傲娇神探妙法医的技巧能够归纳为令牌数量或任何值。由于Solidity不能表明大于22末世前方体系56-1的值,因而它一直能够与uint256进行比较余秀菁,成为“有用无限”值

处理gas本钱问题

一般,在gas本钱方面需求进行什么是猫刑权衡。人们最终将默许值设为0的一精牛个典型原因是存储非零值会消耗很多和小姨同居的日子gas。

假如存储本钱关于您的用例而言吴山居工作账是很高的,请考虑以下技巧:

在此代码中,写入存储的_ex魂归莱茵piration值默许状况下为0,与曾经的特别含义相同。可是,我介绍了一个辅觉悟,pat-PDD 援建的「皮皮欢喜期望小学」竣工助函数expiration(),它将0转换为不太特别的值他信女儿2256-1。这意味着我的其他代码无需处理这种特别状况。

考虑将此技能与自定义的linter规矩配对运用,以确保您不会在expiration()函数之外的任何地方直接读取_expiration。

特别地址

关于地址,我常常看到两种特别状况绿母族觉悟,pat-PDD 援建的「皮皮欢喜期望小学」竣工:

  1. 地址0一般是不答应的。
  2. 不答应运用特定地址(一般是特权人物)。

特别地址0

这是一些了解的代码,其间运用0作为特别状况:

制止运用地址0一般是为了保护用户不受过错的影响。将令牌发送到觉悟,pat-PDD 援建的「皮皮欢喜期望小学」竣工地址0一般不会比将它们发送到地址1更糟糕,但0是默许值,因而更或许由于有过错的东西或库而意外传入。

我个人不喜欢这种地址0的支票,但这很少有问题。与前面的示例不同,假如开发人员在保护代码时忘记了这种特别状况,那么全部都不会中止沪a00001。

特花舞之灵殊人物地址

这段代码比上一段要费事得多觉悟,pat-PDD 援建的「皮皮欢喜期望小学」竣工:

当我看到这样的代码时,我的直接问题是为什么所有者地址无法接纳令牌。这样的查看一般是为了将安全操控措施放在恰当的方位,但一般无法处理Sybil进犯,由于体系中的多个地址由同一个人操控。

在这个特定的比如中,所有者能够简略地接纳具有不同地址的令牌。假如这违反了合同的安全性假定,那就有问题了。

像这样的特别状况是一种代码气味,但这并不意味着它们总是应该被消除。要做的重要工作是记载为什么需求这种特别状况,并考虑代替计划。

总结

  1. 特别状况会导致代码复杂性,然后导致过错。
  2. 在或许的状况下,彻底消除特别状况。
  3. 2256-1是最大值的杰出代替品。
  4. 地单无双址0的特别状况一般能够。
  5. 其他特定地址的特别状况是代码气味。
  6. 假如决定在代码中运用具有特别含义的值,请测验阻隔用于处理这些值的代码。

相关文章

标签列表