英亚体育-英亚体育官方网站英亚体育-英亚体育官方网站

官方视频
减少智能合约代码复杂性并提高可维护性【英亚体育官方网站】
来源:英亚体育    发布时间:2021-08-09 21:00:02
本文摘要:在本文中,我将共享一些示例,解释避免类似情况如何增加代码复杂性并提升可维护性。

英亚体育官方网站

在本文中,我将共享一些示例,解释避免类似情况如何增加代码复杂性并提升可维护性。类似最大值少见的类似情况是用于0回应“无最大值”。这种类似情况一般来说很更容易避免。

Special Expirations看下面的代码uint256 expiration;// Use 0 to mean "no expiration".function setExpiration(uint256 newExpiration) external {expiration = newExpiration;}function doSomething() external {require(expiration == 0 || nowexpiration, "Error: expired");...}在这段代码中,0是一种类似情况,回应“没过期”。这种类似情况是不直观的,它减少了require语句的复杂性。

然而,确实的危险性是团队中的一个新的开发人员忽视了这个错综复杂之处,无法处置expiration==0的类似情况。这很更容易造成资金损失或其他相当严重问题。这样代码就更加非常简单更加显著了:// Default to 2**256-1 instead.uint256 expiration = 2**256-1;// Use 2**256-1 to mean "no expiration".function setExpiration(uint256 newExpiration) external {expiration = newExpiration;}function doSomething() external {require(now = expiration, "Error: expired");...}这里,我用于的是uint256容许的最大值的expiration,而不是0,当牵涉到到时间砍时,expiration实质上是无限的。类似仅次于以太币数量这是一个十分相近的示例,但这次牵涉到以太币:uint256 maxWithdrawal;// Use 0 to mean "no maximum".function setMaxWithdrawal(uint256 newMax) external {maxWithdrawal = newMax;}function withdraw(uint256 amount) external {require(maxWithdrawal == 0 || amount = maxWithdrawal, "Error: too much");...}某种程度,我们有一个非直观的特例,我们可以通过用于一个有效地的无限值来解决问题这个问题:// Default to 2**256-1 instead.uint256 maxWithdrawal = 2**256-1;// Use 2**256-1 to mean "no maximum".function setMaxWithdrawal(uint256 newMax) external {maxWithdrawal = newMax;}function withdraw(uint256 amount) external {require(amount = maxWithdrawal, "Error: too much");...}2256-1是最大值留意,某种程度的技巧可以总结为令牌数量或任何值。

由于Solidity无法回应小于2256-1的值,因此它一直可以与uint256展开较为,沦为“有效地无限”值解决问题gas成本问题一般来说,在gas成本方面必须展开权衡。人们最后将默认值划为0的一个典型原因是存储非零值会花费大量gas。如果存储成本对于您的用例而言是很高的,请求考虑到以下技巧:uint256 _expiration; // 0 still means "no expiration"...// Properly handle the special cases in one place.function expiration() internal view returns (uint256) {return _expiration0 ? _expiration : 2**256-1;}function doSomething() external {require(nowexpiration(), "Error: expired");}在此代码中,载入存储的_expiration值配置文件情况下为0,与以前的类似含义完全相同。

但是,我讲解了一个辅助函数expiration(),它将0切换为不过于类似的值2256-1。这意味著我的其余代码需要处置这种类似情况。考虑到将此技术与自定义的linter规则筛选用于,以确保您会在expiration()函数之外的任何地方必要加载_expiration。类似地址关于地址,我常常看见两种类似情况:1. 地址0一般来说是不容许的。

2. 不容许用于特定地址(一般来说是特权角色)。


本文关键词:英亚体育,英亚体育官方网站

本文来源:英亚体育-www.huifeng58.com

上一新闻:网络炒作嬗变轨迹警示执法必严:英亚体育

下一新闻:“准骑证”提升风险防范意识和自我保护能力

推荐阅读

企业要闻

企业动态

门窗百科

太阳能着色 互补系统 易护理 保温 环保节能
预约报名 免费测量 免费设计 免费报价 免费安装 终身维护
版权所有©2011-2020 十堰市英亚体育官方网站科技股份有限公司
鄂ICP备96614062号-4
联系地址: 湖北省十堰市滴道区然克大楼82号
联系电话:041-728491908
联系邮箱:663395747@qq.com
传真号码:0522-22647589