<small id='WYGCcJe'></small> <noframes id='nzWxcI'>

  • <tfoot id='xSPQ'></tfoot>

      <legend id='0MY1qQ'><style id='dsypAiX'><dir id='YIoMsFaO'><q id='aKuJOCLD7'></q></dir></style></legend>
      <i id='YwZh'><tr id='D6BS'><dt id='c0wOfgsx1b'><q id='def6Fbw'><span id='HWiOdjn3ZY'><b id='rRPg'><form id='Xrusx'><ins id='FCh59xY'></ins><ul id='uq1oHcJ5iL'></ul><sub id='d1I4mQH'></sub></form><legend id='9YFnbr'></legend><bdo id='aWu1MpN'><pre id='3jcTKSX0a'><center id='hw3XeCz'></center></pre></bdo></b><th id='vB4h'></th></span></q></dt></tr></i><div id='merAs'><tfoot id='tcgEK5'></tfoot><dl id='shKj'><fieldset id='dPsD'></fieldset></dl></div>

          <bdo id='LOmKV'></bdo><ul id='TWFzNlEfxw'></ul>

          1. <li id='bHWwvRk'></li>
            登陆

            区块链研讨实验室|削减智能合约代码复杂性并进步可维护性

            admin 2019-12-13 306人围观 ,发现0个评论

            在本文中,我将共享一些示例,阐明消除特别状况如何削减代码复杂性并进步可保护性。

            特别最大值

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

            Special Expirations

            看下面的代码

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

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

            这样代码就更简略更显着了:

            这儿,我运用的是uint256答应的最大值的expiration,而不是0,当触及到时刻戳时,expiration实际上是无限的。

            特别最大以太币数量

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

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

            2256-1是最大值

            留意,相同的技巧能够归纳为令牌数量或任何值。由于Solidity不能表明大于2256-1的值,因而它一直能够与uint256进行比较,成为“有用无限”值

            处理gas本钱问题

            一般,区块链研讨实验室|削减智能合约代码复杂性并进步可维护性在gas本钱方面需求进行权衡。人们最终将默许值设为0的一个典型原因是存储非零值会消耗很多gas。

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

            在此代码中,写入存储的_expiration值默许状况下为0,与曾经的特别含区块链研讨实验室|削减智能合约代码复杂性并进步可维护性义相同。可是,我介绍了一个辅佐函数expiration(),它将0转换为不太特别的值2256-1。这意味着我的其他代码无需处理这种特别状况。

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

            特别地址

            关于地址,我常常看到两种特别状况:

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

            特别地址0

            这是一些了解区块链研讨实验室|削减智能合约代码复杂性并进步可维护性的代码,其间运用0作为特别状况:

            制止运用地址0一般是为了保护用户不受过错的影响。将令牌发送到地址0一般不会比将它们发送到地址1更糟糕,但0是默许值,因区块链研讨实验室|削减智能合约代码复杂性并进步可维护性而更或许由于有过错的东西或库而意外传入。

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

            特别人物地址

            这段代码比上一段要费事得多:

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

            在这个特定的比如中,所有者能够简略地接纳具有不同地区块链研讨实验室|削减智能合约代码复杂性并进步可维护性址的令牌。假如这违反了合同的安全性假定,那就有问题了。

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

            总结

            1. 特别状况会导致代码复杂性,然后导致过错。
            2. 在或许的状况下,彻底消除特别状况。
            3. 2256-1是最大值的杰出代替品。
            4. 地址0区块链研讨实验室|削减智能合约代码复杂性并进步可维护性的特别状况一般能够。
            5. 其他特定地址的特别状况是代码气味。
            6. 假如决定在代码中运用具有特别含义的值,请测验阻隔用于处理这些值的代码。
            请关注微信公众号
            微信二维码
            不容错过
            Powered By Z-BlogPHP