区块链学习笔记23——ETH反思

学习视频:北京大学肖臻老师《区块链技术与应用》
笔记参考:北京大学肖臻老师《区块链技术与应用》公开课系列笔记——目录导航页

  • 智能合约真的智能吗?

智能合约并没有用到人工智能的技术,有人认为应该叫做“自动合约”,按照事先写好的代码自动执行某些操作。现实世界中自动执行某些操作的例子如ATM取款机,物理世界的自动合约,插入银行卡输入密码,就会自动把钱给你。智能合约其实并不智能,反而有些“笨”,因为一旦写好之后就无法修改,实际上是一种代码合同。

  • 不可篡改性是一把双刃剑

一方面来说不可篡改性增加了合同的公信力,大家都只能按照合约中的规定去做,没有人能篡改。
另一方面不可篡改性也意味着如果规则中有漏洞,想要修补这个漏洞,想软件升级,都是很困难的。在区块链的世界里,软件更新需要硬分叉来实现,无论是比特币还是以太坊,硬分叉都不是随便搞得,以太坊的硬分叉,最后就造成了两条平行的链。而且硬分叉要说明理由,否则矿工不会升级软件,但是一旦说明理由就容易把漏洞的信息泄露出去,有恶意的攻击者可能会在没来得及升级软件之前抢先发动攻击。
另外,即使我们已经发现了系统漏洞,已经有人进行恶意攻击了,想要冻结账户终止交易都是很困难的。要想冻结账户,要进行软发叉,发布一个软件的更新凡是跟这个账户相关的交易都是不合法的,这才能够冻结,但是明显不可能因为个人原因发布一个软分叉,只能把账户剩下的钱尽快转到安全的账户。与之类似,智能合约一旦发布到区块链上,没有办法阻止对它的调用。比如The DAO事件,1/3的钱被黑客盗走了,剩下的2/3的钱也非常危险,但是没有办法阻止别人调用智能合约,唯一的办法是用黑客的方法把钱转到另一个安全的合约。

  • 没有什么是真的不可篡改的

一个篡改的例子就是分叉攻击,以太坊团队通过软件升级的方法强行改变某些账户的状态。一般情况下区块链上的内容想要篡改是很难的,但是遇到重大事件真的想改还是能改得了的。

  • Solidity语言设计上的问题

solidity的语言特性是反自然的,一般的理解,我给你转账,你是一个被动的接受者,你不可能反过来调用我,但是solidity的语言特性是说我给你转账的操作等于隐性地调用了你的fallback函数,结果你就可以再来调用我。这个和生活常识不同所以安全漏洞容易被忽略。
有人提出应该用函数式的编程语言,函数式语言(例如:ocaml)比较安全不容易出现这种漏洞

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

solidity 语言是图灵完备的,但是会有漏洞,比特币脚本语言比较简单,目前没有发现任何漏洞。能不能找到一个比比特币语言复杂又比solidity简单的语言?不容易出现安全漏洞。
很难找到,因为在设计语言的时候不可能预知到其所有的使用场景
解决方法:可以向常用的智能合约提供一些模板,也有可能会出现专门编写智能合约的机构就像律师事务所一样。

  • 开源的好处

去中心化的系统像如区块链都是开源的,也就是透明的,因为必须要让所有的节点都执行同样的内容才能达成共识。
开源的一个好处就是增加合约的公信力,接受群众的监督。
有些人认为开源的另外一个好处是安全,因为全世界的人都在看着这些代码,那么为什么开源软件还会出现漏洞呢?这种现象叫做many eyeball fallacy错误认知的意思,相当于misbelief。但实际上真正有时间看代码的人少之又少,看的人不是很多,也不一定能看得懂。

  • 关于去中心化

以太坊的硬分叉真的就是以太坊的开发团队说了算的吗?
不是,这个硬分叉能成功,也是90%的绝大多数的矿工升级了软件用行动支持了硬分叉,剩下的一小部分虽然没有支持,但是也依然在旧链上继续挖矿,以太坊团队也没有办法强制所有人都升级软件。去中心化并不是不能修改已经制定的规则,而是修改规则要用去中心化的方式进行。硬分叉的成功是因为大多数的矿工认为以太坊团队的措施是符合公众利益的。
而分叉正好是去中心化系统的体现,因为只有去中心化系统,用户才可以选择分叉,中心化系统只能选择继续或者放弃。存在分叉的现象恰恰是民主的体现,比如系统私自增多以太币供给量,使得以太币贬值,矿工就可以选择分叉继续维护原来的以太币

  • 去中心化与分布式不是等价的

一个去中心化的系统必然是分布式的,如果这个系统只运行在一台计算机上,显然不能叫去中心化;但是分布式系统不一定是去中心化的,即使这个系统运行在成千上万的计算机上,如果计算机都是由同一个组织管辖的,那也不是去中心化,比如谷歌的search engine;在一个分布式的平台上可以运行一个中心化的应用,也可以运行一个去中心化的应用。
比特币和以太坊都是交易驱动的状态机,state machine的特点是让系统中几千台机器重复做同一组操作,付出很大的代价来维护状态的一致性,这个并不是分布式系统常用的工作模式,大多数的分布式是让每台机器做不同的事情,然后再把各台机器的工作结果汇总起来,目的是比单机速度快。状态机的目的不是为了比一台计算机的处理速度快,而是为了容错。状态机最早的应用场景:mission critical application.特点是应用程序必须无间断的对外提供服务,哪怕宕机一分钟都会造成很大的损失,所以他才有好几组计算机重复同一组操作,这样即使有一台计算机故障,剩下的计算机也可以对外提供服务。 eg: airtraffic control; stock exchange; space shuttle.这样付出的代价是效率很低,几台机器合在一起比一台机器慢,因为需要同步状态,而且集群里的数目越多速度越慢,所以传统利用状态机的应用场景,机器的数目都是比较少的,可能就是个位数字。像比特币和以太坊这样上千台机器重复同一组操作,之前是没有出现过的。

智能合约是编写控制逻辑的,只有那些互不信任的实体之间建立共识的操作才需要写在智能合约里。大规模存储和计算不适用,又慢又贵,因为还要消耗汽油费,使用云服务平台更好。

区块链学习笔记23——ETH反思相关推荐

  1. 区块链学习笔记15——ETH状态树

    区块链学习笔记15--ETH状态树 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 引入 要实现的功 ...

  2. 区块链学习笔记19——ETH难度调整

    区块链学习笔记19--ETH难度调整 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 前面学过,比特 ...

  3. 区块链学习笔记21——ETH智能合约

    区块链学习笔记21--ETH智能合约 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 智能合约简介 ...

  4. 区块链学习笔记16——ETH交易树和收据树

    区块链学习笔记16--ETH交易树和收据树 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 交易树和 ...

  5. 区块链学习笔记4——BTC实现

    区块链学习笔记4--BTC实现 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 UTXO 区块链是一 ...

  6. 区块链学习笔记(一)——区块链和搓麻是一样一样的

    区块链学习笔记(一)--区块链和搓麻是一样一样的 新的开始 一个故事 要点 总结概念 几个搞笑的解释(真实性待查) 新的开始 你好! 这是我的第一篇学习笔记,想来想去就从近几年挺火的区块链开始吧,大多 ...

  7. 区块链学习笔记(三)——从商鞅变法谈“共识机制”

    区块链学习笔记(三)--从商鞅变法谈"共识机制" 前言 一.商鞅变法的故事 总结一下 二.共识机制 1)什么是共识机制 2)要点 总结 前言 区块链健康运行的灵魂是"共识 ...

  8. 区块链学习笔记2——BTC中的数据结构

    区块链学习笔记2--BTC中的数据结构 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 本文主要介绍 ...

  9. 区块链学习笔记(初识区块链)

    区块链 区块链比比特币更加迷人,区块链具有革命性的意义,它是一个创造信任的机器 AI是生产力的提升,区块链是生产关系的变更,可能使人类的生产结构产生重大变革,淡化国家的权利机构 比特币按字节数收费 一 ...

最新文章

  1. 归并排序(代码注释超详细)
  2. 读“基于深度学习的图像识别技术研究综述”有感
  3. R语言unique函数计算数据对象(vector、dataframe)的unique独特值:unique函数从vector向量、dataframe中删除重复项、删除dataframe重复行
  4. 【Structs2】struts2单例多例以及spring整合的问题
  5. input must have last dimension = k = 3 but is 2 for 'TopKV2_这种错误是怎么产生的
  6. android 动态控制截屏,应用助手for Android新版本:可动态截屏存图
  7. 阿里云容器服务新增支持Kubernetes编排系统,性能重大提升 1
  8. 写得好的html网页,优化网站排名-使用Markdown编写更好的内容和HTML
  9. 华为鸿蒙系统手机匹配,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  10. 16个最佳软件配置管理工具
  11. 国内从事CV相关的企业
  12. 基于Xposed修改微信运动步数
  13. photoshop图片放大不失真
  14. 基于dragonboard 410c的智能魔镜设计(7)——UI原型设计
  15. 关于explain plan的使用!
  16. laravel Helpers文件 通用帮助函数 以及常用帮助方法
  17. Web前端:2022年十大React表库
  18. jython 导入java包_在jython中导入java类
  19. C++PrimerPlus 第三章 处理数据
  20. 家用打印机助力返校季 惠普发布《亚洲儿童学习白皮书》

热门文章

  1. 李开复:如何做最好的创新
  2. libsvm 2.6 的代码注释(支持向量机的神作)
  3. web-log-parser 安装记录
  4. 18118 勇者斗恶龙(c++ STL sort的运用)
  5. 内存的永久保存区内存溢出解决
  6. vue 有关于命名大小写的问题
  7. The server time zone value is unrecognized or represents more than one time zone. 这个问题的解决方法
  8. python字符串两个冒号_Python 数组字符串 冒号 用法
  9. 基于Spring+SpringMVC+Beetl的权限管理框架源码分享
  10. 基于C++的数据结构-1