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

当前位置:首页 > 新闻中心

亚洲最大的游戏平台_使用工厂模式提高智能合约安全性

发布时间:2020-12-15    来源:冠亚电竞官方网站24611

冠亚电竞官方网站-智能合同可以分发其他智能合同。这样就可以实现工厂模式。

冠亚电竞官方网站

在工厂模式下,您可以创建多种智能合同。每个智能合同只能跟踪一个,而不是跟踪很多东西的智能合同。

在此方案中使用,可以修改代码,增加特定类型的安全漏洞的影响。在这篇文章中,我给你解释一下最近审计中发现的一个主要漏洞的例子。

如果用在工厂模型上,漏洞会增加很多。SUV智能合同下面有一个智能合同,通过非常简单的界面销售WETH。如果你有WETH,你必须批准后,把这个智能合同卖给你的代币。

它确保你能得到正确的金额缴纳。只要批准后有充裕的代币,任何人都可以销售WETH。合同用于向卖方缴纳支付模式,但合同的作者犯了相当严重的错误:1//Technically This Could Sell Any Token,But we ' re selling weth in This 2//example because then67基础(ierc20 _ weth)公共{ 8weth=_ weth9 } 1011//buy weth from a specified seller . seller must first approve weth . 12 function buy from(address seller)exters 14 requiies)16 } 1718//used by a seller to get their eth . 19 function with draw(uint 256 amount)external { 20 require(amount)Forgotthis 336023//Balance of[msg . sender]-=amount;2425 (bool success,)=msg . sender . call . value(a mount)(' ');26require (success,‘eth transfer failed’));27}28}(代码为.代替transfer。

要告诉call使用的原因,请要求读者“立即停止使用Solidity的传输()”。由于卖方余额没有增加,不缴纳以太坊的卖方可以反复调用withdraw()来消费所有人的合同。

这是一个相当严重的漏洞。和大多数虫子一样,修理这个虫子看起来微不足道。但是在这篇文章中,即使我们不说这个特定的问题,我也想谈谈如何通过工厂模式减少这个错误。

(大卫亚设,Northern Exposure(美国电视),工厂名言)现在让我们看一下更简单的WETHMarket合同版本。在这个版本中,合同只管理销售一个卖家的WETH。本协议与以前版本完全相同的错误:1 contract weth sale { 2ie RC 20 public weth;3address seller//only a single seller 4 u int 256 public balance;//no need for a mapping any more 5 6 constructor(ierc 20 _ weth,address _ seller)public { 7 weth=_ weth;8seller=_ seller9 } 1011//no need to specify the seller . 12 function buy()external payable { 13 balance=msg . value;14 require(weth . transferfrom(seller,msg.sender,msg . value));15 } 16 17 function withdraw(uint 256 amount)外部{18 require (msg.sender==seller,' only the seller 19require));2021uint256 amount=balance22 23//Whoops!Forgot This 336024//Balance-=Amount;25 26 (bool success,)=msg . sender . call . value(amount)(' ');27require (success,' eth transfer failed .);28}29}没有相同的逻辑错误,但这个漏洞并不严重。只有一个帐户可以调用withdraw(),合同中存储的所有以太网都属于该帐户。

这个错误的影响只是余额,不能反映合同的实际余额。这个bug是手动选择的,展示了它的优点,但这个bug代表了托管地协议中的很多种类的bug。

根据我审查智能合同的经验,这是寻找重要漏洞的最难得的地方之一。委托地后面的想法是,合同中必须单独保管不同的资金,以便始终包含所有债务。

获得托管权最简单的方法之一是将资金分成几乎不同的智能合同。工厂模型可以看作是理解防卫的托管场所。 非常简单的代码单个卖家版本的合同不仅承载更强大,而且更简单。

亚洲最大的游戏平台

我们去掉了函数参数和同构。在生产代码中,balance几乎被删除,address(this)。可以更进一步,取代balance。我写合同是为了方便读者,所以原来的代码已经很简单了。

在现实世界中,这种差异有可能更加明显。从安全角度来看,所有减少复杂性的机会都是胜利。

亚洲最大的游戏平台

工厂模式各卖家可以分发自己的wethsale合同,并受益于非常简单的合同,但这种方法有主要缺点。故意的卖方可以分发稍有变化的代码版本,但实际上不发送Weth。

即使信用度高的公司(如ConsenSys Diligence)审查WETHSale代码,每个买家也必须确认他们销售的明确合同是否用于该明确代码。工厂使用可以解决这个问题。

工厂保证部署的每个合同都用于完全相同的代码,并确保了一个非常简单的查询机制,用于查询同等卖方的单个合同:Contract Wethsalefactory { IERC 20 Public Weth。映射(address=weth sale)public sales;建构器(ierc20 _ weth)公用{ weth=_ weth} function deploy()external { require(Sales[msg . sender]==weth sale(0),‘only one sale per ser Sales’}}对工厂型号潜在遗漏的一个主要缺点是价格昂贵。CREATE opcode目前的燃气成本为32000。

我们的同类合同中还需要另外两个SSTORE来跟踪WETH和卖方地址,每个地址应为20000气体。这比代码的全部多卖家版本至少多了72000气体。另一个潜在的缺点是复杂性。大部分情况下,工厂模式修改了现有合同、网络报纸网,但要求忘记添加了名为工厂本身的新合同。

根据代码的不同,复杂性可能会降低。在请求工厂型号之前,要慎重考虑更改的总体影响。摘要1 .管理地方面的错误是造成主要漏洞的最重要原因。2.分离的智能合同可以减少这些错误的严重性。

工厂模式以不可靠的方式构建了这个。4.在使用工厂模型之前,还要考虑潜在的缺点。。

本文来源:冠亚竞猜-www.fivejumps.com

分享到:
宏达电将获准继续向美国出口最新款手机:冠亚竞猜 失落的星辰:痛别谷歌Reader
热门文章
登戏马台作|亚洲最大的游戏平台
土豆炖豇豆的做法
冠亚竞猜_特色烧牛排的做法
【冠亚电竞】院线电影《天下无债》剧组 前往石狮探景
重磅 | 我校于海鹏教授获得2019年国家杰出青年科学基金项目资助
基于光纤通道的IEEE1394光信号传输系统设计:冠亚电竞
何猷君的儿子为什么是第五代 何猷君家族怎么排名 何猷君奚梦瑶儿子小
冠亚电竞官网:林志颖晒35年前童年照 厚厚香菇头超像Kimi
易致疾病的垃圾食品排行榜|冠亚电竞
青岛老人免费测血压测出血栓-冠亚电竞
冠亚电竞-芦笋浓汤的做法
亚泰胜建业迎新赛季首胜 国脚尖刀状态复苏让分迷欣喜
冠亚电竞:马永康:门将谁出场还没确定 新帅没提供任何意见
冠亚竞猜-我校召开2017年秋季学期学校工作会
我校举行南方学院2019届本科生毕业典礼
客户案例
×