江苏体彩网|首页_江苏体彩网官方

071-15024415

在线客服| 微信关注
当前位置: 首页 > 企业新闻

使用工厂模式提高智能合约安全性|江苏体彩网官方


江苏体彩网|首页

江苏体彩网官方|智能合同可以分发其他智能合同。这样就可以实现工厂模式。

在工厂模式下,您可以创建多种智能合同。每个智能合同只能跟踪一个,而不是跟踪很多东西的智能合同。在此方案中使用,可以修改代码,增加特定类型的安全漏洞的影响。

在这篇文章中,我给你解释一下最近审计中发现的一个主要漏洞的例子。如果用在工厂模型上,漏洞会增加很多。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’}}对工厂型号潜在遗漏的一个主要缺点是价格昂贵。C江苏体彩网|首页REATE opcode目前的燃气成本为32000。我们的同类合同中还需要另外两个SSTORE来跟踪WETH和卖方地址,每个地址应为20000气体。这比代码的全部多卖家版本至少多了72000气体。

另一个潜在的缺点是复杂性。大部分情况下,工厂模式修改了现有合同、网络报纸网,但要求忘记添加了名为工厂本身的新合同。

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

2.分离的智能合同可以减少这些错误的严重性。工厂模式以不可靠的方式构建了这个。4.在使用工厂模型之前,还要考虑潜在的缺点。|江苏体彩网官方。

本文来源:江苏体彩网-www.ebiz-wiki.com

客户案例Customer case
  • 因支持港警 刘亦菲《花木兰》被外网极端分子抵制|江苏体彩网官方
  • 故宫开“分馆”,好东西要分享
  • 江苏体彩网|首页_警惕驻村工作“挂空档”_时事政治_中公教育网
  • 工资单如果看不懂,预算又如何可监督_江苏体彩网
  • 回天新材定增募资4亿 两高管套现后再认购为哪般?:江苏体彩网
  • 【江苏体彩网|首页】VR交互科技公司NOLOVR获中移创投战略投资,将推进5G业务加速落地
  • 【江苏体彩网|首页】江苏扬州出台新规加强道路交通安全管理 驾车吸烟罚50元
  • 江苏体彩网|首页|中美科学家40万人研究表明:健康的睡眠或降低患心血管疾病风险
  • 江苏体彩网|首页_中威电子发布2015年半年报 营业收入增长78%
  • 公司通过种业、休闲食品、海参、加工与贸易、活鲜品等业务板块的销售拉动