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

这篇具有很好参考价值的文章主要介绍了北大肖臻老师《区块链技术与应用》系列课程学习笔记[27]以太坊-反思。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、智能合约的反思

        1.Is smart contract really smart?

        2. Irrevocability is a double edged sword.

        3. Nothing is irrevocable.

二、语言设计上的反思

        1.Is solidity the right programming language?

        2.编写智能合约的语言应该有什么样的表达力?

三、去中心化

        1.What does decentralized mean?

        2.分叉

        3.Decentralized ≠ Distributed

        回顾以太坊的The DAO盗币事件,引起的反思。

一、智能合约的反思

1.Is smart contract really smart?

        智能合约真的智能吗?首先智能合约没有用到任何人工智能的技术,所以有人认为应该将其称为自动合约:按照写好的代码,自动执行某些操作,ATM取款机可以看作是物理世界中的自动合约。Smart contract is anything but smart.智能合约实际上就是一段写死的自动执行的合约代码,并不智能,而且写好之后就不能修改。

2. Irrevocability is a double edged sword.

        一般我们认为不可篡改性是区块链的一个优点,有很多区块链的应用都利用了不可篡改性,如用它进行防伪、溯源等操作,但是通过The DAO的盗币事件其实已经能够意识到:不可篡改性实际上是一把双刃剑

(1)优点:不可篡改性增加了合约的公信力,所有人都只能按照合约中的规则来,没有人能够篡改这个规则。

(2)缺点:不可篡改性意味着如果规则有漏洞,想要修补漏洞或者软件升级都是很困难的。

        有传闻说在发生盗币事件之前,The DAO的开发团队就已经收到消息说智能合约存在漏洞,但是没有来的及发布更新后的软件。硬分叉是非常麻烦的,和传统的中心化系统相比,没有办法及时发布补丁patch修复,必须征得绝大多数矿工的同意才行。硬分叉的时候又需要说明理由,一旦说明理由又会泄露系统的安全漏洞,有恶意的攻击者会在还没来得及升级前抢先发动攻击。

(3)缺点:已经发现了系统漏洞,有人进行恶意攻击了,想要冻结账户终止交易也是很困难的。

        个人的私钥泄露,想要冻结账户需要软分叉(发行一个软件的更新并设置凡是跟这个账户相关的交易都是不合法的),但是对于个人账户没有办法进行软分叉,只能尽快把账户剩下的钱转到安全的账户。

        智能合约一旦发布到区块链上,没有办法阻止对它的调用。比如The DAO的盗币事件,1/3的钱被黑客盗走了,剩下的2/3的钱也非常危险,但是区块链上没有办法阻止别人调用智能合约,要阻止的话就要软分叉,唯一的办法是用黑客的方法把钱转到另一个安全的合约,再用安全的智能合约将来把钱退还给大家。

3. Nothing is irrevocable.

        没有什么是真的不可篡改的。分叉攻击中,如果有人从本来已经写入区块链的内容的前面开始分叉,可能会导致后面的交易被回滚。The DAO的盗币事件中,开发团队强行修改数据使得交易恢复被攻击之前的账户状态,所以没有什么是绝对不可篡改的。篡改是很难,但是遇到特殊情况也是可以篡改的。

二、语言设计上的反思

1.Is solidity the right programming language?

        Solidity语言设计上有什么问题?为什么会有重入攻击?Solidity的语言特性是反自然的,一般的理解,我给你转账,你是一个被动的接受者,你不可能反过来调用我,但是Solidity的语言特性是说我给你转账的操作等于隐性地调用了你的fallback函数,结果你就可以再来调用我。这个和生活常识不同所以安全漏洞容易被忽略。

        有人提出应该用函数式的编程语言,函数式语言(如:Ocaml,图灵完备的编程语言)比较安全不容易出现这种漏洞,而且从长远看要实现的是对智能合约功能的理论上要证明他的正确性。formal verification:理想化能够证明这一段智能合约语言的编写只能实现我们想让他实现的功能,现实中是不存在的。

2.编写智能合约的语言应该有什么样的表达力?

        Solidity 语言是图灵完备的(凡是计算机能完成的任务,图灵完备的语言都能实现),但是会有漏洞;比特币脚本语言比较简单,目前没有发现任何漏洞。能不能找到一个比比特币的脚本语言复杂又比Solidity简单的语言?符合这样要求的编程语言很难找到。

        未来发展:可以向常用的智能合约提供一些模板,也有可能有专门编写智能合约的机构(就像律师事务所一样)。

代码开源的双刃剑

        去中心化的系统像如区块链一般都是开源的,也就是透明的,因为必须要让所有的节点都执行同样的内容才能达成共识。开源的一个好处就是增加合约的公信力,接受群众的监督。

        有些人认为开源的另外一个好处是安全,因为全世界的人都在看着这些代码,但是已经看到智能合约代码出现漏洞,全世界这么多双眼睛看着开源代码,怎么会出现错误呢?这种现象叫做many eyeball fallacy,错误认知,相当于misbelief。理论上,代码开源,任何人想看都可以去看,好像更安全,但实际上是真正有时间看代码的人少之又少,看的人不是很多,也不一定能看得懂。所以并不能认为开源软件比不开源软件安全,也不能认为开源软件就没有安全漏洞,历史上有很多开源软件的安全漏洞是很多年之后才被发现的。

三、去中心化

1.What does decentralized mean?

        区块链的追随者一般都是去中心化理念的追随者。以太坊的硬分叉是以太坊的开发团队说了算的吗?不是,以太坊的团队升级软件之后,也是90%绝大多数的矿工用行动支持了硬分叉,而剩下的一小部分虽然没有支持,但是也依然在旧链上继续挖矿,以太坊团队也没有办法强制所有人都升级软件。去中心化并不是全自动化,不是说不能修改已经制定的规则,而是修改规则要用去中心化的方式进行。硬分叉的成功是因为90%的矿工认为以太坊团队的措施是符合公众利益的

2.分叉

        分叉正好是去中心化系统的体现,因为只有去中心化系统,用户才可以选择分叉,中心化系统只能选择继续或者放弃。存在分叉的现象恰恰是民主的体现,比如系统私自增多以太币供给量,使得以太币贬值,矿工就可以选择分叉继续维护原来的以太币。

3.Decentralized ≠ Distributed

        一个去中心化的系统一定是分布式的,如果这个系统只运行在一台计算机上,显然不能叫去中心化;但是分布式系统不一定是去中心化的,即使这个系统运行在成千上万的计算机上,如果计算机都是由同一个组织管辖的,也不是去中心化的,比如谷歌的search engine;在一个分布式的平台上可以运行一个中心化的应用,也可以运行一个去中心化的应用。

        比特币和以太坊都是交易驱动的状态机,State Machine,特点是让系统中几千台机器重复做同一组操作,付出很大的代价来维护状态的一致性,这个并不是分布式系统常用的工作模式,大多数的分布式系统是让每台机器做不同的事情,然后再把各台机器的工作结果汇总起来,目的是比单机速度快。

        状态机的目的是为了比一台计算机的处理速度快,而是为了容错。状态机最早的应用场景:mission critical application。应用程序必须无间断的对外提供服务,哪怕宕机一分钟都会造成很大的损失,所以他才有好几组计算机重复同一组操作,这样即使有一台计算机故障,剩下的计算机也可以对外提供服务,如: airtraffic control; stock exchange; space shuttle。这样付出的代价是效率很低,几台机器合在一起比一台机器慢,因为需要同步状态,而且集群里的数目越多速度越慢,所以传统利用状态机的应用,机器的数目都是比较少的,可能就是个位数字。像比特币和以太坊这样上千个机器重复同一组操作,以前是没有出现过的。

        智能合约是编写控制逻辑的,只有那些互不信任的实体之间建立共识的操作才需要写在智能合约里。大规模存储和计算不适用,又慢又贵,因为要耗汽油费,云服务更好。如果需要大规模计算服务,可以使用亚马逊的云服务平台。文章来源地址https://www.toymoban.com/news/detail-809542.html

到了这里,关于北大肖臻老师《区块链技术与应用》系列课程学习笔记[27]以太坊-反思的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 北大肖臻老师《区块链技术与应用》系列课程学习笔记[25]以太坊-智能合约-5

    智能合约-1 智能合约-2 智能合约-3 智能合约-4 网上竞拍第二版:由投标者自己取回出价 (1)存在的问题         重入攻击,如果有黑客写了一个如下方程序会怎么样?         这个hack_bid跟前面的那个黑客合约hack_bid合约是一样的,通过调用拍卖bid函数参与竞拍,ha

    2024年03月11日
    浏览(65)
  • 北大肖臻老师《区块链技术与应用》系列课程学习笔记[22]以太坊-智能合约-2

    智能合约-1 目录 一、智能合约的创建和运行         1.智能合约的创建         2.汽油费         3.错误处理         4.嵌套调用 二、思考         1.GasLimit和GasUsed         2.以太坊中的GasLimit跟比特币的区别 1.智能合约的创建         智能合约 由一个外

    2024年02月19日
    浏览(50)
  • 北大肖臻老师《区块链技术与应用》系列课程学习笔记[15]以太坊-交易树和收据树

     目录 一、以太坊中的三种树 二、状态树、交易树和收据树的区别 三、交易树和收据树的用途         1.交易树和收据树的用途         2.如何实现复杂的查询操作         3.以太坊中Bloom Filter的用途 四、以太坊的运行过程        在以太坊中,存在三种基于树的

    2024年02月05日
    浏览(54)
  • 《区块链技术与应用》北大肖臻老师——课程笔记【21-23】

    提示:以下内容只是个人在学习过程中记录的笔记,图片均是肖老师课程的截图,可供参考。如有错误或不足之处,请大家指正。 权益证明proof of stake 比特币和 以太坊目前都是使用基于工作量的证明,这种共识机制受到一个普遍的批评——浪费电。 Y轴是TWH=Terawatt hours 10的

    2023年04月08日
    浏览(41)
  • 《区块链技术与应用》北大肖臻老师——课程笔记【11-12】

    提示:以下内容只是个人在学习过程中记录的笔记,图片均是肖老师课程的截图,可供参考。如有错误或不足之处,请大家指正。 1. 转账交易时如果接收者不在线(没有连接到比特币网络上)怎么办? 转账交易不需要接收者在线,这个交易只是在区块链上记录一下,把发送

    2024年01月22日
    浏览(48)
  • 《区块链技术与应用》北大肖臻老师——课程笔记【6-8】

    提示:以下内容只是个人在学习过程中记录的笔记,图片均是肖老师课程的截图,可供参考。如有错误或不足之处,请大家指正。 比特币网络传播的工作原理(the BitCoin network): 比特币工作在应用层(application layer),底层是P2P的overlay network(覆盖网络)。 比特币的 P2P网络

    2024年01月18日
    浏览(45)
  • 《区块链技术与应用》北大肖臻老师——课程笔记【19-20】

    提示:以下内容只是个人在学习过程中记录的笔记,图片均是肖老师课程的截图,可供参考。如有错误或不足之处,请大家指正。 Block chain is secured by mining. 对于基于工作量证明的系统来说,挖矿是保障区块链安全的一个重要手段。 比特币的挖矿算法总的来说比较成功,没有

    2024年02月09日
    浏览(39)
  • 北大肖臻老师<<区块链技术>>笔记1

    课程的大纲 密码学基础 比特币的数据结构 共识协议和系统实现 挖矿算法和难度调整 比特币的脚本 软分叉和硬分叉 匿名和隐私保护 以太坊是后面的 首先是密码学基础的学习: crypto-currency(虚拟货币) 是不加密的,区块链上所有的教以都是公开的。其中有转账金额和地址。

    2024年02月02日
    浏览(38)
  • [北大肖臻-区块链技术与应用笔记]第八节课——BTC 脚本

    比特币系统中使用的脚本语言很简单, 唯一能访问的内存空间就是一个栈 ,这点和通用脚本语言的区别很大。 这个交易有一个输入和两个输出,其中一个输出已经被花出去了,另一个没有被花出去。 输入脚本 输入脚本包含两个操作,分别将两个很长的数压入栈中。 输出脚

    2024年01月21日
    浏览(68)
  • [北大肖臻-区块链技术与应用笔记]第八节课——BTC 分叉

    state fork 如果两个节点差不多同时挖到一个区块,这两个区块都是挂在当前的区块上的,不同节点先收到的区块不同,就会各自沿着先收到的区块往下扩展,这种时候就会出现临时性的分叉,称为 state fork ,即由于对区块链当前的状态有意见分歧而产生的分叉。 分叉攻击(

    2024年02月08日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包