我们的专业付出,值得您的永久信赖!为您量身定制,信誉第一!

订货热线:13206308947

推荐产品
  • 巴西22岁励志男孩:9岁丧父,15岁当爹,如今养全家25口人
  • 亚搏手机版|川岛芳子之谜:川岛芳子为什么被判死刑
  • 【亚搏手机版】明清官场地方官如何分配的?
当前位置:首页 > 新闻中心 > 行业动态
亚搏手机版:减少智能合约代码复杂性并提高可维护性

 


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

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