咨询热线:0898-08980898
网站公告: 诚信为本:市场永远在变,诚信永远不变。
十大靠谱外围买球网站
地址:重庆市重庆市重庆区电海大楼1268号
电话:0898-08980898
传真:1234-5678
邮箱:admin@lsltjz.com
邮编:527521
客户案例当前位置: 首页 > 客户案例>

减少智能合约代码复杂性并提高可维护性_十大靠谱外围买球网站

更新时间:2024-11-15

本文摘要:在本文中,我将共享一些示例,解释避免类似情况如何增加代码复杂性并提升可维护性。

在本文中,我将共享一些示例,解释避免类似情况如何增加代码复杂性并提升可维护性。类似最大值少见的类似情况是用于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. 不容许用于特定地址(一般来说是特权角色)。


本文关键词:十大靠谱外围买球网站,十大靠谱外围买球网站排行榜前十名推荐,外围买球app十大排名榜推荐

本文来源:十大靠谱外围买球网站-www.lsltjz.com

【返回列表】
地址:重庆市重庆市重庆区电海大楼1268号    电话:0898-08980898    传真:1234-5678    
Copyright © 2000-2024 www.lsltjz.com. 十大靠谱外围买球网站科技 版权所有     ICP备案编号:ICP备11954779号-5