北大肖臻老师《区块链技术与应用》系列课程学习笔记[26]以太坊-TheDao

news/2024/5/2 21:47:26/文章来源:https://blog.csdn.net/YSL_Lsy_/article/details/126622982

一、TheDao

1.提出背景

        重入攻击在现实中真的发生过,这个事件发生在2016年,在以太坊历史上赫赫有名,造成了以太坊的分裂,可以说以太坊的历史都被它改写。

        比特币实现了去中心化的货币,以太坊实现了去中心化的合约,既然去中心化这么好,为什么不把所有的都改成去中心化,所以有人提出一个口号:decentralized everthing,DAO(Decentralized Automous Organization,去中心化的自治组织)就是在这个背景下产生的。
传统社会当中,组织是建立在某种法律文件基础上的,如需要有一个书面的章程,规范组织的行为,有时候还需要到政府进行登记注册。在区块链上,DAO这个组织就是建立在代码基础上的,组织的规章制度是写在代码里的,通过区块链的共识协议维护这种规章制度的正常执行。

2.The DAO的工作原理

        在2016年出现了一个致力于众筹投资的DAO——The DAO,类似于一个众筹的投资基金(用来投资项目的),只不过投资的钱是在区块链上众筹得到的,其本质是一个运行在以太坊上的智能合约。如果想要参与The DAO,可以把以太币发给这个智能合约,然后换回The DAO的代币。需要决定投资哪个项目的时候是大家投票决定的,手里的代币越多,投票权中就越大。投资后如果有了收益,也是按照智能合约中的规章制度进行收益分配的。

        The DAO工作原理有点像DAC(Decentralized Automous Corporation,去中心化的自治公司)。DAC和DAO的区别是:DAC是处于盈利目的的,DAO可以是处于非盈利性目的,如公益事业。虽然是Corporation,但是现实中不具有公司应有的法人地位,也就是董事长之类的职务。

        The DAO,从2016年5月开始众筹,受到瞩目,因为以前没有这么民主的投资资金,在当时被称为是一种伟大的尝试,引起互联网社区里很大的兴奋,从5月开始众筹,一个月众筹到了1.5亿美元的以太币。遗憾的是The DAO只存活了3个月,问题在哪呢?假如投资者需要用钱了,想把以前投资的以太币换回来,在The DAO的基金里,以拆分的方法实现。

3.拆分

        拆分过程,就是split DAO(拆分DAO),这个拆分的方法并不仅仅是取回收益,还是建立子资金(chlid DAO)的方法。如果有一小部分人和其他人的投资理念不一样,这种情况下,这一小部分人可以用拆分的方法成立自己的子资金,拆分的时候手中的代币是要被收回的,换成相应数量的以太币,然后就可以投想投的项目。极端情况下,单个投资者成立一个子资金,在子资金里就能把所有的钱投给自己,这是投资者取回投资和收益的唯一途经。并没有withdraw()函数,竞拍不成直接取回,这里不行,只能用拆分的方法。

        拆分的时候有7天的讨论期,大家可以讨论这个拆分好不好,拆分之后有28天锁定期,拆分后,把钱打入子资金里面,但是只有28天后才能取出来,就是这28天给了以太坊一个缓冲期。拆分的理念没有错,而且可以说是民主制度的进一步体现,问题出现在splitDao实现上,如下图1-1所示,他是先转账后扣除总资金,然后把账户清零,正确的操作顺序是先清零后转账,黑客就用这个漏洞进行重入攻击。

4.暴露问题

图1-1

         The DAO,从2016年5月开始众筹,一个月众筹到了1.5亿美元的以太币,然后黑客就在这里利用重入攻击从里面转走了5千万美元的以太币,这件事当时在以太坊社区引起了很大的恐慌,大家本来认为前途无量的The DAO,去中心化这么美好的理念,在现实中被证明是不堪一击的。这个事件也引起了以太币价格的大跳水。

5.讨论阶段

        针对这样的重入攻击,以太坊社区进行了激烈的讨论,社区讨论的补救措施大致分为两类:

(1)回滚交易

        成立的子基金有28天的锁定期,所以黑客暂时还没有办法把钱取走,还有时间可以采取补救措施。通过回滚交易,不让黑客得逞,以此保护广大投资者的利益。(如果出了问题就回滚,就不是去中心化的);

(2)不需要采取补救措施

        因为黑客没有做错,没有违反法律。Code is law,规则由代码决定,代码中的漏洞也是规则的一部分。这个事情发生之后,网上流传着一封据说是黑客写给以太坊社区的公开信,公开信中黑客就说:“我没有做错任何事情,我只是利用了你代码中的一个feature,是代码写的让人可以重复多次取钱,并没有违反任何法律。”

        以太坊有一部分人认为,尤其不应该回滚交易,因为区块链最重要的特性是不可篡改性,如果出了问题就会滚,怎么能叫不可篡改呢?而且这次出问题的只是以太坊上的一个应用而已,The DAO是以太坊上的一个智能合约,以太坊没有问题,是智能合约存在一个安全漏洞。但是以太坊有那么多的智能合约,如果每个合约出了问题都回滚的话那不就乱套了。

6.补救措施

        Vitalik Buterin团队认为因为该事件影响非常大,The DAO又占据了超过10%的以太币,too big to fail,所以还是决定回滚了交易。如果就是一个小的智能合约出了问题,或者转账转错了,以太坊社区是不管的,开发团队也是不管的。

        如果使用分叉攻击,从黑客最开始重入攻击的区块开始分叉,是不行的,因为还存在一些其他交易,如果要回滚必须精确定位到黑客盗取以太币的交易,其他发布的正常交易不能受到影响,这是采取补救措施的一个原则。

        具体的补救措施

        以太坊团队对此制定两步走战略:①锁定黑客账户;②清退The DAO基金上的这些钱。

(1)软分叉补救

        以太坊团队发布软件升级,在升级的软件里增加了一条规则,凡是跟The DAO这个基金上的账户相关的,不允许做任何交易,发布之后,大多数矿工都做出了升级,这里形成的是软分叉(临时性分叉),因为增加这个规则之后,新矿工挖出的区块旧矿工是认可的,但是旧矿工挖出的区块,新矿工有可能不认可。

        这个软件升级的想法挺好的,也得到了大多数矿工的支持,但是升级后的软件有Bug:不予执行的非法交易用不用收取汽油费?汽油费的收取是为了防止Denial of Service(拒绝服务),如果不收取汽油费,就会有恶意的攻击者一直发送非法交易,浪费矿工资源,矿工也得不到交易费,反正对他们来说成本很低。以太坊发布的这个软件升级,恰恰就是在这种情况下,没有收取汽油费(检查到地址错误的时候没有收汽油费)。结果导致网上有大量的Denial of Service,非法交易进行攻击,于是后来就很多人恢复了原来的版本。

        软分叉的方案就失败了。这个时候,情况就比较严峻了,子基金成立之后有28天的锁定期,然后黑客就可以把钱取走了,软分叉的方案失败之后,剩下的时间就不多了。

(2)硬分叉补救

        后来新的措施,以太坊团队采取硬分叉方案:通过软件升级的方法,把The DAO账户上的所有资金,强行转到新的智能合约上去。这个新的智能合约只有一个功能:退钱,把代币退回成以太币。这种做法的本质是:用软件升级的方法强行重新记账,本来转账需要合法签名,现在的做法是,凡是The DAO上面的资金,不管本人同不同意,都要强行转入一个新的智能合约。升级的软件里规定了强制执行的具体日期:升级了软件的矿工,挖到第192W个区块的时候,自动执行转账交易,不用合不合法签名。这是在升级的软件里写死的规则,旧矿工是不会认可这些区块的,因为没有合法签名,属于非法交易,所以这是硬分叉。

        硬分叉的方案一经提出,在以太坊社区内引起了激烈的辩论,那些曾经认为不应该进行补救措施的人,认为这种强行记账的方式是不能接受的。支持硬分叉和反对硬分叉的人分成两派,以太坊团队实现了一个用智能合约投票的功能:把手里的以太币发到智能合约里进行投票,最后投票的结果是大部分人支持硬分叉,于是大多数矿工升级了这个硬分叉之后的版本。大家就平心静气等着挖到第192W个区块,最后,硬分叉成功了,黑客还是没能盗走以太币。

(3)后续

        当时那些反对硬分叉的人,并没有因为这个投票结果而改变立场。因为投票时是有两个智能合约,一个代表支持硬分叉,一个代表反对硬分叉,需要的是把以太币发送到代表自己意见的智能合约里,然后这些以太币会锁在相应的智能合约里面,直到投票结束再退回。

        实际上,有很多以太币根本就没有参加投票;更重要的是:投票能说明问题吗?大多数人的意见一定是对的吗?这样做真的公平吗?硬分叉之后,旧的那条链并没有消亡,还是有一部分矿工留在上面继续挖,只不过算力大幅度下降了,不到原来的1/10,但是相应的挖矿难度也降低了。过了一段时间,有一些交易所开始上市交易旧链上的以太币。以太币ETH,硬分叉后新链继承了这个符号,仍叫ETH,旧链则为ETC(Ethereum Classic)。

        在旧链上挖矿的矿工有些是为了投机,也有一些是为了信仰,他们坚持着纯粹的去中心化理念,认为旧链才是正宗的以太坊,那些搞硬分叉的是在搞修正主义。一开始大家认为ETC的前途非常迷茫,但是一直到现在,仍然是新链和旧链并存。旧链和新链并存,这会导致重放攻击,在新链上的也可以在旧链上执行,旧链上的合法交易在新链上也可以执行,于是增加一个chainID区分它们。

二、思考

无论是软分叉的解决方案还是硬分叉的解决方案,都是为了锁定黑客盗币的账户,但是解决方案中都是将The DAO的所有账户作为目标,软分叉的时候The DAO的所有账户都不准交易,硬分叉的时候,The DAO的所有账户都要转入新智能合约,为什么不能只针对黑客账户?

        如果只冻结黑客账户,那么其他账户该如何处理,其他账户还能正常运行吗?如果智能合约有BUG,发布到区块链上之后是修改不了的。The DAO这些智能合约是有BUG的,光冻结黑客账户,剩下账户继续运行的话,下一次其他人又可以成为黑客,再用同样的方法偷以太币,所以智能合约出现这种致命性BUG就作废了。硬分叉之后,The DAO的生命周期就结束了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_3869.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于双碳背景和趋势讲述AcrelEMS企业微电网能效管理系统-Susie 周

1、引言 自工业化以来,全球地表温度一直处于上升趋势,已对全球生态系统、社会经济环境以及人类生活环境造成严重影响,在此背景下实现“双碳”目标势在必行。 2021年9月16日,国家发改委印发《完善能源消费强度和总量双控制度方案…

通过Docker安装ElasticSearch和Kibana

1、安装ElasticSearch(单节点) 1.1、创建docker网络 因为安装完ElasticSearch后还安装Kibana,为了让ElasticSearch和Kibana互联,因此我们得先创建一个docker网络 docker network create es-net1.2、加载镜像并运行 因为这里使用ElasticSearch的7.12.…

为什么现在西红柿都“硬邦邦”的,放几个星期都不会坏?为你解答

以前城市还没有大范围扩建的时候,农村里的人很多,每家每户都会把自家的田地大理的井井有条,吃什么从自己的菜园子里摘了,稍微洗一下就进锅。 黄瓜结的一个比一个脆甜,冬瓜长得一个比一个大,还有西红柿闻着…

图像修复论文阅读笔记------Image Inpainting for Irregular Holes Using Partial Convolutions

一、引言 不仅考虑了孔的大小,还考虑了孔是否与图像边界接触的影响。 为了正确处理不规则掩码,提出使用部分卷积层,包括掩码和重新归一化卷积操作,然后是掩码更新步骤。 论文的主要贡献 使用部分卷积和自动掩码更新步骤来实现…

Centos7搭建sftp服务器,开启SFTP上报日志

需求:192.168.56.103服务器搭建sftp服务,配置sftp上报日志(类似vsftpd的/var/log/xferlog) 1、创建用户组sftpgroup,添加用户sftpuser(密码为123456,不可登录,上传目录为upload&…

计基于安卓 Android 微信小程序的孕妇产后康复系统app

关于产后修复文章 1:产后修复:女人第二次生命绽放 女性在一生中有三次机会可以调整自己的体型,那就是初潮期、 产后、更年期。而较重要的就是产后这个阶段,据调查,女性体内的 荷尔蒙等雌激素能使经历过生育这一过程的女性寿命增加十年。 这个时期,女人的身体就好像一个打开的大…

4G多协议转MQTT工业智能网关BL110之二:包装清单

在安装使用BL110设备之前,请确认产品包装盒里是否具备以下材料: (以下材料图片仅供参考,如有出入或革新,请以实物为准!) l 1XBL110网关 BL110工业智能网关整机 l 1x 输入电源的4PIN 3.5mm接线…

【Wordpress】docker环境下wordpress网站安装ssl/tls证书

目录 一、前言 (一)ssl/tls是什么? (二)docker的wordpress怎么下载? 二、正文 (一)docker环境的wordpress介绍 (二)配置步骤 1、加载Apache SSL模块 2…

初识react笔记

https://reactjs.org 官网 在开始前,请确保你的电脑安装了node,不知道装没装,就命令行工具node -v 一下 一:安装官方脚手架create-react-app 第一种npm install -g create-react-appcreate-react-app 项目名称 第二种npx create…

视频流PS打包方式详解

文章目录 视频流PS打包方式详解 1 PS流概述 2 PS封装格式 2.1 PES格式详解 2.2 PS头封装格式 2.3 PS system header封装格式 2.4 PSM封装格式 3 PS流整包发送和分包发送 1 PS流概述 PS流: Program Stream(节目流),简称PS流,将一个或多个分组但有共…

【python】计算mel频率可能比你想象的要复杂一点

Mel计算公式 计算mel频率可以直接套用公式, 公式如下, m2595log10(1f700)m 2595 log_{10}(1 \frac{f} {700}) m2595log10​(1700f​) 所以实现上如下 import numpy as np import librosadef mel_calculate(freq):return 2595 * np.log10(1freq/700)…

猿创征文|小而巧的API文档生成工具之smart-doc

文章目录smart-doc介绍smart-doc特性smart-doc的最佳搭档谁在使用smart-docsmart-doc的优缺点smart-doc和swagger区别比较smart-doc的使用姿势姿势一姿势二姿势三(公司内部推荐使用)总结smart-doc介绍 一个 java restful api 文档生成工具,不…

为了进大厂!吃透了各大厂最新 3000+Java 面试题,啃完面试肯定妥了!

在很多企业,都有 KPI 考核,然后在此基础上还会弄个“末位淘汰”( 或者叫“人员优化”)。互联网大厂残酷现状在此,无法避免,为了助力程序员朋友们跳槽面试、升职加薪、职业困境,提高自己的技术,逃脱掉“人员…

【翻译】A Closed-form Solution to Universal Style Transfer

通用风格迁移的闭式解决方案 文章目录Abstract1. Introduction2. Related Work3. 动机4. Method5. Results5.1. 定性结果5.2. 定量结果5.3. 更多结果5.4. 限制条件6. 结论Abstract 通用风格转换试图明确地将特征空间的损失降到最低,因此它不需要对任何预先定义的风…

牛视源码定制,抖音矩阵系统,别和谐啊、、、

抖音SEO内容如何制作? 现在网上有很多这种关于自己行业的一些数据分析的一些文章,大家可以去看一下。 所以看到这里,我们把做好抖音SEO需要的步骤其实也就四步,但是过程是需要不断的测试和优化。 四、SEO如何优化? …

配置本地Maven仓库——IDEA配置本地Maven源

Maven基础配置 现在大多数都是使用maven管理项目所需的资源文件,可是因为maven的远程仓库多数都很难下载,所以我们可以通过配置国内镜像,配置本地maven源。 1、下载maven maven下载链接 2、maven下载后是一个压缩包,直接解压即可…

利用HFSS-API设计指数渐变传输线

学个Antenna是以天线仿真和调试为主,理论原理为辅的干货天线技术专栏,包括天线入门知识以及各类天线的原理简介、仿真软件建模、设计、调试过程及思路。如有想看到的内容或技术问题,可以在文尾写下留言。 ​摘要: 上节学个Antenna…

纵横网络靶场 刷题记录

目录 Modbus协议 MMS协议分析 大工UDP协议 工控蜜罐日志分析 隐信道数据安全分析 工控安全取证 隐藏的黑客 Modbus协议 黑客通过外网进入一家工厂的控制网络,之后对工控网络中的操作员站系统进行了攻击,最终通过工控协议破坏了正常的业务。我们得…

Linux学习笔记

Linux安装在VM上 直接安装即可,或者打开VMX文件,挂载到VM上 Linux的目录结构 /代表根目录。~不同的用户,代表的目录不同。 超级管理员用户:root,终端中显示~,表示/root目录 普通用户:在hom…

手写一个泛型双向链表

前言 在当前大环境的背景下面试不问点算法都不算个合格的面试了(卷),而与算法紧密相关的数据结构也是经常问到的,像集合、链表、树、图、栈、堆、队列、矩阵 等等等等。 是不是感觉难度如下: 集合:有手就…