发布时间: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
冠亚电竞:朝代:唐朝作者:楚光宗没见宋颜后,英雄社会各界奋起反击。吕梁河小人不穿衣服,大人物付出沉重代价。天门神武,树根,九日吴茱萸第六军。一般的建筑和小船游得特别好,蹦蹦跳跳的歌吹着浮云。城内各处的
1.豇豆采摘洗净,切成段;2片马铃薯薄片;加热3锅,加入少许肉丝翻炒至金黄色;4重新加入葱、姜、蒜,使其变香,加入土豆、豇豆,翻炒,然后用特制五香粉、酱油盐、适量水烧;小火调味8分钟左右。我丈夫讨厌不
冠亚电竞-1准备好所有必要的材料。2牛排拿出来缝好,换成小块。3将牛排的冷水放入锅中煮出泡沫。用温水洗净。4往锅里放油,冷锅里放牛排,炸牛排里的水炸,牛排还是炒黄的,捞牛排。5我会在刚才的牛排油炸油里
冠亚电竞官方网站_院线电影《天下无债》由福建中策电影有限公司、如家吧(武汉)影视文化传媒有限公司、香港沈重华泰基金管理有限公司、北京德意嘉豪电影有限公司弟弟出品.(监制庄少阳,龚智端)近日,《天下无债