企业培训资讯_企业培训干货

当前位置:首页 > 名师团队 > 落地导师

减少智能合约代码复杂性并提高可维护性【亚博在线登录】

发布时间:2021-06-03    来源:亚博官方网站56076

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

亚博官方网站

在本文中,我将共享一些示例,解释避免类似情况如何增加代码复杂性并提升可维护性。类似最大值少见的类似情况是用于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.flying-food.com

分享到:
CF召唤神龙领极品活动地址 CF2019年3月召唤神龙领极品活动详情|亚博官方网站 九阴真经八周年资料片定档8.16 外域势力冥岳武学首爆
热门文章
给农民工吃下定“薪”丸
“过劳肥”不该成为白领职业病【亚博官方网站】
亚博官方网站-又见保姆虐童遇到好保姆全要碰运气?
亚博登录入口:兰州:两人涉嫌销售假冒伪劣防疫产品被批捕
亚博登录入口-无良自媒体,价值底线何在
这位“布衣院士”一生节约,却捐出880万积蓄
国航公布13日北京境外输入病例回京始末:乘客谎称登机前未服药|亚博官方网站
地铁“禁饮”是否小题大做_亚博在线登录
亚博官方网站:游客十年六上黄山寻恩人
亚博登录入口-复工喽!2020年首趟湖北就业专列顺利抵达浙江
象牙藏内裤!广州海关连查6宗违规携带象牙制品案
【亚博在线登录】孕妇即将分娩,却遇到这个难题!西安助产士:第一次碰见
关注公务员心理健康绝非多此一举|亚博在线登录
亚博在线登录-河南一高校试点男女混住?校方回应:“存在误解”
紫金e评:汇聚中国力量,打赢人民战争:亚博在线登录
客户案例
×