Off

使用工厂模式提高智能合约安全性|OPE电子竞技

by admin on 2021年5月7日

ope体育专业平台

ope体育专业平台-智能合同可以分发其他智能合同。这样就可以实现工厂模式。在工厂模式下,您可以创建多种智能合同。

每个智能合同只能跟踪一个,而不是跟踪很多东西的智能合同。在此方案中使用,可以修改代码,增加特定类型的安全漏洞的影响。在这篇文章中,我给你解释一下最近审计中发现的一个主要漏洞的例子。

如果用在工厂模型上,漏洞会增加很多。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。根据我审查智能合同的经验,这是寻找重要漏洞的最难得的地方之一。委托地后面的想法是,合同中必须单独保管不同的资金,以便始终包含所有债务。

OPE电子竞技

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

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

OPE电子竞技

在现实世界中,这种差异有可能更加明显。从安全角度来看,所有减少复杂性的机会都是胜利。工厂模式各卖家可以分发自己的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.在使用工厂模型之前,还要考虑潜在的缺点。-ope体育专业平台。

本文来源:ope官方电子体育网站-www.cybertechindustries.com

相关文章

Comments are closed.

网站地图xml地图