以太坊带来的一些反思

一、智能合约的反思

智能合约真的智能吗?(Is smart contract really smart?)
智能合约并不智能,而是更接近自动合约。(Smart contract is anything but smart.)

二、不可篡改性的反思

Irrevocability is a double edged sword.
很多区块链的应用都利用了不可篡改的特性,比如防伪、溯源。但是从“The DAO”事件当中,可以看出不可篡改性其实是一个双刃剑。

一方面,不可篡改性增加了合约的公信力,但另一方面,不可篡改性也导致了代码漏洞不能及时修复,也不能阻止别人调用智能合约。在区块链世界,漏洞修改有时需要硬分叉,还需要得到大部分矿工的支持。

不可篡改性还导致另一个问题,在账户私钥泄露的情况下,账户冻结需要软分叉来实现,对于普通人只能尽快将资金转安全账户。

Nothing is irrevocability.
理论上,没有什么什么是绝对不可篡改的,比如分叉攻击可以回滚交易。“The DAO”事件中,以太坊开发团队通过软件升级方式强行改变了某些账户的状态,所以不能迷信不可篡改的特性。

三、合约语言设计的反思

Is solidity the right programming language?
solidity语言上有一些反人类的特性,比如转账给另一个人,另一个人可以反过来调用自己的函数,这与常识不一样。
有人提议应该改进为函数式编程语言,这样比较安全,不容易出现漏洞。

如果能够用形式化验证(formal verification)的方式,证明一段程序只能做规定好的工作,那么将能够解决智能合约的漏洞问题。但是形式化验证距离实用仍有很大的距离。

表达能力适中的语言,可以实现智能合约的功能,又不容易出现漏洞。但是难以设计出适当的语言,因为难以预料未来的攻击。

联想到现实中的合同,也会出现由于不严谨出现一些纠纷,所以通常使用模板写合同来规避这些问题。智能合约可以参考这种在模板基础上书写合约的方法,以后应该也会出现类似写智能合约的专门机构。

四、开源软件漏洞的反思

去中心化的系统一般都是开源的,因为需要所有节点执行同样的操作,才能达成共识。开源的一个好处就是增加合约的公信力,接受群众的监督;有人认为另一个好处是不容易出现安全漏洞,但实际情况并不如此。

Many eyeball fallacy.
理论上代码是开源的,但实际上去研究代码的人是很少的,即便研究了也不一定有足够的专业性去研究,例如像“The DAO”这样涉及到财产安全的项目,也出现了重大安全事故。所以开源软件不能避免出现漏洞。

五、去中心化的反思

What does decentralization mean?
用去中心化的方式更改规则。
分叉并不是强迫的结果,不同分叉代表了不同人认可的规则,所以分叉恰恰是去中心化(民主)的体现;反观在中心化的世界中,用户不满意游戏规则只能选择退出。

六、去中心化与分布式的反思

decentralized ≠ distributed
一个去中心化系统必然是分布式的,但是分布式系统不一定是去中心化的。

  • 分布式(distributed)系统一般指的是不同的机器做不同的工作,目的是提高处理速度,由于存在任务切分、节点通讯、任务汇总等任务,处理速度很难线性提升,但仍然比一台机器要强大。
  • 去中心化(decentralized)系统一般是状态机(state machine)模式,所有机器的工作不是为了处理速度,而是为了容错,几台机器速度会比一台还慢。集群内机器越多,速度也会越慢,因为节点间需要同步状态。

所以智能合约不适合大规模计算和大规模存储的需求,只有那些需要在互不信任的实体间建立共识的操作,才需要写在智能合约里。

发布了22 篇原创文章 · 获赞 2 · 访问量 4327

猜你喜欢

转载自blog.csdn.net/ice_fire_x/article/details/104286109
今日推荐