为什么会有ETH和ETC?the DAO攻击事件2周年祭

2023-10-26

前两天,跟一位HiBlock区块链社区的用户私聊,他问我一个问题,同样是智能合约,为什么会有以太坊和以太经典,又为什么会有相应的ETH和ETC,两者价格还相差如此之大。

转给他一篇the DAO事件的文章后突然发现,the DAO攻击事件已经过去2年了,今年的6月17日大家都在关注父亲节、端午节以及德国和墨西哥队的比赛爆冷,无论币圈还是链圈,没有人提及the DAO。

也许今年的6月17日有人因重注墨西哥队而大赚一笔,但无论如何也比不上2年前6月17日黑客攻击the DAO转走了300多万以太币资产,当时价值6千万美元,而以今年6月18日的ETH价格计算,则价值15亿美元。

1

the DAO攻击事件回顾

DAO代表的是去中心化自治组织,是区块链法则里不可少的一环,而the DAO含义为“DAO之母”,是建立在以太坊上的一个应用,功能类似于投资机构。参与者可以使用以太币来换取DAO,也就是the DAO的token,持有DAO可以对the DAO的投资决策提出自己的意见。

the DAO在2016年5月初成立,到2016年6月16日成功募集到在当时价值1.5亿美元的以太币,短期高速发展让the DAO成为了一个明星项目,但6月17日发生了黑客攻击事件,事件的根本原因在于一行早已被发现的代码漏洞。

康奈尔大学计算机科学系副教授Emin Gün Sirer在给他的一位学生发邮件时提到他正在研究智能合约第666行代码可能存在的问题,甚至在2016年5月份也呼吁过投资者停止对DAO的投资,因为存在这样的安全漏洞。

但是,Gün教授对于代码漏洞无能为力,因为代码发布在以太坊区块链上就无法修改。事实上,发现这行代码漏洞的并不止Gün教授,2016年6月9日,在互联网上出现了与这次黑客攻击相同手法的预警,6月10日智能合约语言Solidity的作者 Christian在以太坊官方博客上发表文章说明这个问题,the DAO团队也接到了安全报告,但做出了不会受到攻击的结论。

2

the DAO被攻击的手段

说起the DAO被攻击的手段需要讲一下the DAO的运行机制。the DAO社区的每一位成员都可以利用自己手中的DAO进行投票,那么就会有一个问题,持有DAO数量越多,投票的占比就越大,会让投资决策出现偏颇,导致基金运行亏损。

所以the DAO就设计了一个“子DAO”的机制,你可以申请创建一个子DAO,审查通过后你的DAO就可以通过代码自动打入子DAO,从总资金池中剥离出来,而攻击漏洞也由此开始。

正常情况下你的DAO打入子DAO后就会从总的资金池中删除掉,但是看下图这行代码,里面的withdrawRewardFor是将钱从总dao打到你的子dao合约,注意前面提到的fallback函数,发送金额到你子dao合约时会触发fallback函数,但是如果你特别写了fallback是再调用总dao的withdrawRewardFor呢?代码会重新运行withdrawRewardFor再给你打钱,而扣钱的代码就永远不会运行到,如果你想,可以将总资金池中的DAO全部转空。

攻击者组合了2个漏洞,第一个漏洞是递归调用splitDAO函数,在第一次被合法调用后,会再次非法调用自己的DAO;第二个漏洞是DAO资产分离后避免从总资金池中销毁,攻击者在递归调用结束前将自己的DAO资产转移到了其他账户,就可以避免这部分DAO资产被销毁。

3

the DAO被攻击后的补救措施

那么,the DAO被攻击后,是如何应对解决的呢?在攻击事件发生后,攻击者并不能马上转走这些资产,而是有一个28天的等待期,在这28天里白帽黑客登场,V神提出方案,目的是要阻止黑客转出这些资产。

事件发生后,以太坊创始人Vitalik在以太坊官方博客发布文章,提出以软分叉的方案解决这次事件,软分叉将从高度1760000开始把任何与the DAO和child DAO相关的交易认做⽆效交易,以此来组织攻击者提现,软分叉之后会进行一次硬分叉找回被转走的以太币。

但因为软分叉的方案需要取得矿工们的同意,方案发布后黑客攻击者暂停了攻击,宣布对不支持软分叉的矿工给与100万以太币奖励。当然,软分叉方案还是顺利通过了,以太坊官方推出了针对TheDAO的软分叉版本Gethv1.4.8,但这个软分叉版本却又一次出现了漏洞。

这个漏洞比较明显,简单地说,每个以太坊上的交易,验证节点(矿工)都会检查是否与TheDAO智能合约及其子DAO的地址相关。如果是则拒绝这个交易,从而锁定TheDAO(包括黑客在内)的所有资金。这个逻辑实现本身并没有问题,但是却没有收取执行交易的手续费,这就像节假日高速免费一样,导致以太坊成为了DoS的攻击目标,攻击者可以零成本发起大量交易,导致以太坊网络瘫痪,由此各个节点回滚了软件版本,软分叉方案宣告失败。

之所以提出软分叉,是为了避免回滚,软分叉失败后只能进行硬分叉,而距离黑客可以转出提现的时间只有2周,同时还要进行所有矿工的投票来通过这次硬分叉方案。最终有大约450万以太币参与了投票,近90%表示同意硬分叉。程序预设在1920000个区块时进行切换,2016年7月20日晚,第1920000个区块在中国产生,TheDAO合约里的所有资金,包括被黑客控制的资金,约1200万以太币,全部转移到了一个新的智能合约中,该合约只有一个功能:退回TheDAO众筹参与人的以太币,众筹参与人只要调用withDraw方法,就可用DAO币换回以太币。

4

the DAO事件的影响

硬分叉之后,被盗的币找回来了,同时以太坊分为了两个链,一条为原链(ETC),一条为新的分叉链(ETH),也就有了现在的ETC(以太经典)和ETH(以太币)两种TOKEN,分别代表新旧社区的共识和价值观。

对于the DAO来说,这次事件无疑意味着项目的终结,甚至直接关联到2017年7月,美国证券交易委员会发布报告时提出,DAO提供和出售的代币是证券,因此受联邦证券法的约束,DAO违反了联邦证券法,所有的投资者也违法了。

5

为什么ETH和ETC会同时存在

两年过去了,当初硬分叉产生的ETH和ETC仍然同时存在,虽然ETH在2018年6月18日的价格不到100人民币,远不及ETC3200人民币,但ETH仍然代表了一部分人对区块链的共识和价值观。

在当初硬分叉投票时,有大约10%的投票参与者反对硬分叉,这部分矿工仍然维持着旧链的算力,他们认为不能为了一己私利就随意篡改代码,代码就是法律,这才是去中心化不可篡改的真谛,而硬分叉代表着代码可以随意修改,决策仍然是中心化的。

而随后,P网宣布支持旧版以太币的交易,代号为ETC,由于价格低,有愿意冒风险的投资人买入,但由于支持人数少,并且依托于旧链的项目少,更新少等问题,价格一直不能和ETH相比。但ETC和ETH代表了区块链世界里的两种价值观。

6

两年过去了,the DAO带给我们什么思考

距离the DAO攻击事件已经过去了2年,这次事件让我们认识到区块链应用安全的重要性。the DAO被攻击的漏洞是项目本身产生的,与智能合约无关,就像某一个网站出现了bug,不能说是互联网技术的问题一样。

2年里,类似这样的安全事故还有很多,2017年Parity钱包漏洞导致15万个ETH被盗,导致几家公司的ICO受阻,当时价值约三千万美元。此外还有类似于CoinDash ICO攻击、Enigma项目欺诈、Tether代币攻击、比特币黄金欺诈以及EOS上线前被发现的安全漏洞。

关于区块链安全,一直是一个绕不开的话题,传统互联网上是信息的存储和传递,而区块链的信息中,包含了大量与金融相关的数据,我们可以不在乎个人信息被各种“贩子”们倒来倒去,但我们不可能不在乎自己银行账户里的钱被随意转来转去。

区块链的去中心化特点带给我们很多未来应用的场景和创意,但去中心化组织在管理逻辑和生态上更加复杂,也就意味着更加容易出现漏洞。

区块链的基础架构由数据层、网络层、共识层、激励层、合约层、应用层六部分组成,技术本身的安全需要做好这六个方面的防护体系,而除了技术本身,还有类似于the DAO事件这样由于代码漏洞产生的安全问题,需要每一个区块链开发者来维护安全,这该如何做到?是否又能有一个公链或组织来保护区块链应用的安全呢?这个问题,欢迎加入HiBlock区块链社区用户群进行讨论。

扫描下方二维码添加小助手微信,邀请您进群。

线下活动推荐

技术工坊|利用智能合约漏洞攻击,转走大量以太币是如何做到的?(上海)

识别二维码回复城市名,即可获得报名地址。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么会有ETH和ETC?the DAO攻击事件2周年祭 的相关文章

  • 操作系统 java模拟主存储器空间的分配和回收

    文章目录 实验原理 算法流程图 代码 结果 实验原理 模拟在可变分区管理方式下采用最先适应算法实现主存分配和回收 1 可变分区方式是按作业需要的主存空间大小来分割分区的 当要装入一个作业时 根据作业需要的主存量查看是否有足够的空闲空间 若有
  • 创建第一个Qt Widget项目

    创建第一个Qt Widget项目步骤 1 选择文件 Ctrl n 2 新建文件或项目 3 Qt Widget Application 4 输入项目名称FirstApplication 选择存储的位置 5 选择构建套件Desktop Qt Q
  • numpy一维数组永远为列向量

    import numpy as np a np array 1 3 4 5 print a shape a np transpose a print a shape print a a np ravel a print a shape pr
  • 静态分析简介

    一 程序静态分析简介 Program Static Analysis 程序静态分析简介 Program Static Analysis 是指在不运行代码的方式下 通过词法分析 语法分析 控制流 数据流分析等技术对程序代码进行扫描 验证代码是
  • 【mysql安装报错(已解决)】ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)

    1 说在开头 我的 mysql 版本是 8 0 27 的 安装的时候 感觉每一步都没有错 但是就是不行 到连接本地数据库时 发现一直连不上 搞了好久 一直报下面的错 ERROR 1045 28000 Access denied for us
  • 一文带你聊聊MYSQL的锁和MVCC

    如果你觉得内容对你有帮助的话 不如给个赞 鼓励一下更新 本文内容总结自极客时间 MySQL实战45讲 专栏 LBCC 单版本控制 锁 基于锁的并发控制 这种方案比较简单粗暴 就是一个事务去读取一条数据的时候 就上锁 不允许其他事务来操作 当
  • 【Python自动化】生成带装饰图形的渐变背景文字封面

    Python自动化专栏 利用文字生成固定比例且带有装饰图形的封面 文章目录 一 背景介绍 二 功能介绍 效果预览 功能清单 三 过程拆解 1 渐变背景层 2 装饰图形层 3 半透明遮罩层 4 文字层 四 完整代码 参考文档 一 背景介绍 在
  • echarts地图map下钻到镇街、KMZ文件转GeoJson、合成自定义区域

    echarts 地图map下钻到镇街 KMZ文件转GeoJson 合成自定义区域 我们可以通过 http datav aliyun com tools atlas 阿里旗下的高德地图提供的api 可以获取到中国各个省份 区级 县级的json
  • NAT技术的主要实现方式及其对网络应用程序的使用影响

    网络地址转换 NAT 是接入广域网 WLAN 的一种技术 能够将私有 保留 地址转化为合法的IP地址 它被广泛应用于各种类型Internet接入方式和各种类型的网络中 NAT的实现方式有三种 静态转换 动态转换和端口多路复用 静态转换设置起
  • Linux审计与日志安全加固

    审计和日志服务配置 auditctl 审计数据配置 日志文件最大参数 在储存策略 etc audit audit conf 中配置max log file
  • 高德地图精确查找与定位RegeocodeQuery与GeocodeQuery

    根据输入的字符串精确查找位置 用GeocodeQuery查找坐标 然后根据获取到的坐标 用RegeocodeQuery查询地址 例子中用了两个页面 一个是显示地址信息及定位的页面 另一个是搜索页面 点击搜索结果返回显示页面 显示信息并定位
  • iOS经典面试题总结--内存管理

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 我根据自己的情况做了一下总结 答案是我总结的 如有答的不好的地方 希望批评指正以及交流 谢谢 内存管理 1 什么是ARC ARC是automatic reference c
  • 【darknet】2、yolov4模型训练之模型训练

    文章目录 1 进行模型训练数据准备 1 1 划分训练和验证集 1 2 将数据标注格式转换为YOLO格式 2 修改配置文件 2 1 新建cfg vechle names 2 2 新建cfg vechle data 2 3 根据所选模型的不同
  • java连接数据库的Connection中的prepareStatement与createStatement的区别

    这两者的区别主要在于如何构造执行sql语句的对象 1 对于prepareStatement来说 其执行返回的是一个prepareStatement对象 而这个方法的描述是这样的 prepareStatement String sql 创建一
  • 在mac上安装gradle(超详细,直接按步骤操作即可轻松搞定)

    在mac上安装gradle 超详细 直接按步骤操作即可轻松搞定 第一步 就是先download最新版本的gradle 网址如下 http gradle org gradle download 然后将下载下来的zip包放解压到本地任意的路径上
  • input 标签里 value值从数据库读取出来的值显示一半或者没显示原因

    存进数据库的字符如下 读取数据出来显示如下 毒 这家超市被星巴克称为 价格警察 这段话没显示出来 原因 这样出来的是value 比海底捞服务更 毒 这家超市被星巴克称为 价格警察 input value值中的双引号被作为value值的结束符
  • 求二元函数最大值matlab,利用matlab, 二元函数求最大值

    求二元函数 z 0 2323 x 2 0 2866 2 2 0 5406 a0 2 1 0203 a0 2 x 2 x 2 y 2 0 5 tanh 2 x 2 y 2 0 5 x 2 0 5733 u0 2 的最大值 变量x和y都是在0
  • React -css in js框架style-components

    原文 https www jianshu com p 27788be90605 前言 前端飞一般的发展中 衍生出各式各样的框架 框架的目的是减轻开发人员的开发难度 提高效率 以前网页开发的原则是关注点分离 意思是各种技术只负责自己的领域 不
  • 【偷偷卷死小伙伴Pytorch20天-day16-损失函数】

    最近这几天忙着开学返校的事情 终于几番周折回到了学校 继续pytorch的学习打卡 一般来说 监督学习的目标函数由损失函数和正则化项组成 Objective Loss Regularization Pytorch中的损失函数一般在训练模型时
  • 服务器 文件类型,linux服务器支持的文件类型

    linux服务器支持的文件类型 内容精选 换一换 弹性云服务器卸载磁盘 弹性云服务器状态为stopped时支持系统盘 也就是 dev sda挂载点 和用户盘的卸载 没有操作系统限制 也不需要在弹性云服务器内部安装vmtools 弹性云服务器

随机推荐

  • 【深度解析→博文总结】李宏毅机器学习2023作业01Regression(COVID-19 Cases Prediction)

    文章目录 系列文章 简要说明 视频分享 作业详情 调参记录 Simple Baseline 1 96993 Medium Baseline 1 15678 Strong Baseline 0 92619 Boss Baseline 0 81
  • Seata1.2.0配置及分布式事务失效解决

    配置 版本说明 springCloud Alibaba组件版本关系 我用的是 cloud Alibaba 2 2 1 RELEASE springboot 2 2 5 RELEASE nacos 1 2 1 seata1 2 0 1 配置数
  • booth算法

    booth算法 1 booth算法定义 2 二进制乘法过程 3 二进制乘法转换成 booth乘法运算 4 Radix 2 Booth乘法器 5 Radix 4 Booth乘法器 6 Booth乘法器计算实例 1 booth算法定义 将乘数看
  • 【CV】图像分类中的细粒度/粗粒度怎么理解

    粗粒度图像分类 类别之间差异大 比如人 汽车 树 细粒度图像分类 类别之间差异小 比如200种鸟的分类 100种花的分类 由于细粒度类别属于同一个大类 所以各类别之间的差距很小 这些细微的差距容易被光照 颜色 背景 形状和位置等变化因素覆盖
  • Python作图——numpy库和matplotlib库

    一 numpy库 1 1概述 numpy是一个存储和处理多维数组 矩阵等的库 提供多种关于数组运算的数学函数 可供直接调用 1 1 1数据类型 numpy的数据类型包括整型 浮点型 复数型 布尔型等 在IDLE查询numpy支持的数据类型
  • MATLAB .dat读、存及简单处理

    文章目录 0 前言 1 思路 2 MATLAB 3 结语 0 前言 近期接触到二进制文件 dat 写一个简单的教程 假设文件内容为连续的通信数据 含有不符合的数据 对其进行简单剔除 1 思路 假设输入 dat文件共有3个整帧数据 每帧长度5
  • 机器学习(归一化、去中心化、标准化)

    为什么要进行数据的预处理 这需要分两种情况说明 1 数据数值很大 2 数据数值很小 1 首先 对于一个数值非常之大的特征 T 若其数值非常之大 区间也非常之大 例如区间范围为 10 10 10 20 以线性拟合函数举例 显然我们在进行机器学
  • Android:JNI调用C++自定义类的详细方法

    一般情况下 我们都是用 JNI 调用 C 的某个方法的代码 包括直接使用 android studio 生成的代码也是如此 但有时我们需要新建 或者得到的是 C 的一个自定义类 在调用时就不能像调用 C 方法那样了 查阅了一部分其他人的博客
  • 学习笔记五:电路设计需要注意的那些事

    注意One part 电路中电源VBAT须要先经过滤波电容再到芯片的VBAT引脚 芯片时钟端走线尽量不要靠近电源走线 避免对电源走线产生纹波的干扰 需要隔离地处理 天线走50欧姆的阻抗设计 走线两侧距离30mil处添加过孔 最好用第三层GN
  • Adobe MAX 2020:最新版Photoshop提供AI智能神经滤镜及天空替换等功能

    数据猿年度重磅活动预告 2020年度金猿策划活动 金猿榜单发布 金猿奖杯颁发 即将推出 尽情咨询期待 大数据产业创新服务媒体 聚焦数据 改变商业 数据报道 受新冠疫情影响 今年的Adobe MAX 2020 于北京时间10月21日改为了线上
  • 一个优秀的程序员真的能顶10个普通的程序员吗?

    一个优秀的程序员真的能顶10个普通的程序员吗 一 前言 优秀的程序员 比糟糕的程序员的工作产出高100倍 二 糟糕程序员会有哪些表现 1 无法对代码进行推理 2 没有补救措施 3 代码难以改动 三 优秀程序员是怎么做的呢 1 先进行实验是他
  • Java+SSM+Vue 毕业设计 游戏攻略资讯补丁售卖商城(含源码+论文)

    文章目录 1 项目简介 2 实现效果 2 1 界面展示 3 设计方案 3 1 概述 3 2 系统流程 3 3 系统结构设计 4 项目获取 1 项目简介 Hi 各位同学好呀 这里是M学姐 今天向大家分享一个今年 2022 最新完成的毕业设计项
  • Win32学习笔记(16)消息类型

    1 消息的产生与处理流程 如上图 我们在创建窗口程序中详细介绍了这张图 比如 我们点击某个窗口的时候就会产生消息 操作系统会先判断这个消息是点在了哪个窗口 找到窗口后 会根据窗口对象中的一个成员找到窗口是属于哪个线程的 找到后就会把他封装好
  • 从零开始搭建一个 React 项目 -- 配置篇(一)

    从零开始搭建一个 React 项目 配置篇 一 参考资源 从零搭建完整的React项目模板 Webpack React hooks Mobx Antd 1 项目初始化及常用以来安装配置 1 创建名为 react admin demo 的目录
  • python虚拟环境配置、Python代码打包成exe可执行文件

    背景 因工作需要 要打包一些脚本使其成为exe文件 方便未安装python环境的电脑运行脚本 但是直接使用默认环境的话 会有很多的包 但是其实这个脚本根本用不到 导致生成的exe文件很大或者直接打包失败 所以创建一个虚拟环境 只安装该代码需
  • socket套接字,粘包问题

    目录 scoket套接字 socket工作流程 TCP服务端 TCP客户端 基于TCP 的SOCKET服务端与客户端 基础版本 客户端 加入连接循环 加入通信循环 支持并发的TCP服务端 常见问题 半连接池 粘包问题 TCP协议的特点 解决
  • OpenAI开源!!Whisper语音识别实战!!【环境配置+代码实现】

    目录 环境配置 代码实现 实现 mp4转换为 wav文件 识别后进行关键词匹配并输出关键词出现的次数 完整代码实现请私信 环境配置 安装 ffmpeg 打开网址 https github com BtbN FFmpeg Builds rel
  • vue使用svg自定义icon图标

    1 安装 svg sprite loader svg sprite loader 是用于创建SVG精灵图的Webpack加载程序 通过该插件可以将导入的SVG文件自动生成为symbol标签并插入进html中 安装语句如下 npm insta
  • 关于Spark报错不能连接到Server的解决办法(Failed to connect to master master_hostname:7077)

    问题产生 Spark集群 即可以基于Mesos或YARN来部署 也可以用自带的集群管理器 部署于standalone模式下 笔者在部署standalone模式时 首先 通过如下命令 启动了Master sbin start master s
  • 为什么会有ETH和ETC?the DAO攻击事件2周年祭

    前两天 跟一位HiBlock区块链社区的用户私聊 他问我一个问题 同样是智能合约 为什么会有以太坊和以太经典 又为什么会有相应的ETH和ETC 两者价格还相差如此之大 转给他一篇the DAO事件的文章后突然发现 the DAO攻击事件已经