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

当前位置:首页 > 核心课程 > 常见问题

使用工厂模式提高智能合约安全性-博发娱乐官方

发布时间:2021-04-09    来源:博发娱乐网址31097

智能合同可以分发其他智能合同。这样就可以实现工厂模式。

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

如果用在工厂模型上,漏洞会增加很多。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.somarz.com

分享到:
博发娱乐登录|京东数科黄海泉:区块链深耕产业,强调共享、协同和监管 博发娱乐登录:御信堂-阿胶红枣片 补气益血
热门文章
博发娱乐登录|京东数科黄海泉:区块链深耕产业,强调共享、协同和监管
武汉小事|当得知92岁爹爹急需换尿管之后-博发娱乐网址
2020年01月15日美国专利局新批准AR/VR专利报告|博发娱乐登录
使用工厂模式提高智能合约安全性-博发娱乐官方
陕西省林业局研究建立野生动物保护及风险管控长效机制【博发娱乐网址】
博发娱乐官方-治愈141人!四川第七第八批援湖北医疗队原地休整
志愿者不配合测体温还叫领导?官方:已批评教育
HIV快速诊断试剂获得盖茨基金会260万资助_博发娱乐官方
博发娱乐网址:上海地铁全路网车站测温全覆盖
可在高温强腐蚀环境下工作的流量计:金属管浮子流量计原理|博发娱乐官方
陈建州范玮琪夫妇卷入口罩争议 副业代言遭抵制
新型高性能锂离子电池充电器
鲲鹏展翅 力算未来 四川省鲲鹏计算产业联盟正式成立【博发娱乐网址】
博发娱乐网址-扫描辐射量减少82%以色列新技术使CT更安全
220t/h节能环保型CFB锅炉的设计方案【博发娱乐网址】
客户案例
×