主页 > imtoken钱包app下载链接 > 9.6 代码漏洞:智能合约的消亡

9.6 代码漏洞:智能合约的消亡

imtoken钱包app下载链接 2023-03-24 06:21:08

9.6.1 谈谈TheDAO事件

提到TheDAO,就必须先说说以太坊,因为这起事件是以太坊发展过程中发生的一起重大安全事件。 事实上,这件事到头来已经演变成两种价值观的争论,不再只是技术上的争论。 以太坊也因为这件事硬分叉成两个版本:以太坊经典(ETC)和以太坊(ETH)。 ).

先说说这个事件吧。 以太坊属于区块链的第二代技术。 与比特币等第一代技术的应用相比,它支持更复杂的脚本编程。 它不仅实现了数字货币本身,还允许开发者使用以太坊支持的脚本语言,让开发者自定义编写具有所需功能的智能合约,这是一种跨越式的创新。 通过智能合约的实现,人们可以在以太坊上创建自己的数字货币(是的,你可以在以太坊上创建以你的名字命名的数字货币)、众筹合约(类似于公开透明的基金账户)、自治管理组织(比如如创建金融租赁公司、创建合作翻译组织等)。 以太坊的这些能力引起了人们的极大兴趣,一些人通过这些技术特性创建了众筹合约。 这是 TheDAO 事件的开始。

这里大家要注意DAO和TheDAO的区别。 DAO是Decentralized Autonomous Organization的缩写,即去中心化自治组织或分布式自治组织(这两个名词在哲学上有差异,这里不展开),DAO是以太坊智能合约支持的功能,TheDAO是一个通过该技术在以太坊上创建并运行智能合约,该技术由德国初创公司 Slock.it 开发并建立。 这份众筹合同一度融资众筹达1.5亿美元。 每个参与众筹的人都在众筹合约中投入了以太坊(其实以太坊本身支持的数字货币也可以叫以太坊),并根据出资额获得相应的DAO代币。 资助者有权审查项目和投票。

然而,虽然以太坊本身像比特币网络一样健壮,通过一系列区块链技术保证了安全性,但在其上创建的智能合约却未必如此。 为什么比特币没有这样的问题? 由于比特币本身不支持复杂的脚本编程,仅支持堆栈指令,极其简单且功能有限,以太坊扩展了脚本的功能,使其成为功能齐全的编程脚本。 复杂带来了强大的功能,也带来了更多的危险。 TheDAO合约源代码存在函数调用漏洞,允许攻击者将TheDAO资产池中的以太币非法转移给自己。 发现这个问题后,TheDAO 守护者立即提议社区发送垃圾交易来封锁以太坊网络,减缓 TheDAO 资产的转移(这其实本身就是一类问题)。 2016年7月,以太坊官方修改了以太坊源代码,强行将TheDAO及其子DAO的资金转移到区块高度1920000的另一个合约地址。然而,这导致了以太坊的分叉,产生了两条链:一个是原链(ETC),一个是分叉出来的新链(ETH)。 可能有朋友会疑惑,原来的链条怎么还存在呢? 是的,这是因为以太坊作为一个区块链应用,是一个去中心化、分布式的系统,软件是否升级是创始人无法控制的。 事实上,ETC和ETH代表了社区的两种价值观 。 ETC认为,无论资金出现什么样的问题,这都是已经发生的事实,区块链应用的精神就是不可篡改。 是的,这是必须坚持的原则。 ETH方面认为,这是一种违法行为,一种破坏行为。 发生在软件系统上的行为不可能是违法的,司法的意义也不容忽视。 为了坚持一个信念,让破坏者攻击是不合适的。

不管怎么说,这次事件的影响是很大的以太坊经典etc源码,也让大家认识到智能合约还处于发展的初级阶段,区块链应用有很好的创新点和很好的技术机制,但是当复杂度增加的时候,基于以上也将伴随各种风险,与之相关的各类法律法规和监管制度的建设也亟待探讨和建立。 未来,相信随着相关技术标准的逐步建立、代码规范的建立以及底层基础设施的不断演进,很多技术问题会一一得到解决。 在很多情况下,破坏性事件充分暴露了潜在的问题,反而会促进技术进步。

9.6.2 奇偶多重签名漏洞

Parity 是以太坊中使用的一种流行的钱包客户端。 它是使用Rust语言开发的,Rust是一种可以用来编写底层系统的开发语言。 Parity性能优异,运行速度快,占用系统资源少,同步块数据非常快。 另外,Parity虽然是全节点钱包,但是在同步区块数据的时候,只为更早的区块保留区块头,其他数据都被去掉,从而减少了很多数据量,而且Parity也可以用来方便的编写和部署智能合约。 想了解更多关于Parity的信息,可以到这个网址查看:。 然而在2017年7月19日,发生了一个非常严重的BUG事故。 问题出在 Parity 钱包的多重签名合约库代码中。 库代码存在漏洞,使得攻击者可以越权调用合约函数,将合约中的资产转移到自己的地址。 虽然这个漏洞在发现后立即被修补,但由此造成的损失和影响还是非常大的。 说到这里以太坊经典etc源码,你可能会觉得以太坊不是很不安全,但也是 TheDAO 事件和 Parity 钱包。 其实他们两个的问题都是智能合约的编写引起的,而不是以太坊本身的问题。 如果打个比方,以太坊就相当于Windows这样的操作系统,智能合约就是运行在上面的应用程序。 这些事件的发生也告诉我们,当区块链应用支持越来越复杂的功能时,各种可能出现问题的概率也会被放大。 当你编写智能合约时,你必须进行专业的代码审查。 任何一个小漏洞都可能导致合约中存入的所有资产丢失。 除了谨慎编写合约代码,从开发的角度,我们还迫切需要建立智能合约编写规范、测试规范等,通过规范的编写流程来保证安全性。

我们来看看Parity官方发布的漏洞报告:

image.png