ETH-反思
约 1284 字大约 4 分钟
2021-12-08
Smart contract really smart?
智能合约真的智能么,智能合约里并没有用到关于人工智能的技术,所以有人认为应该叫做自动合约,按照事先写好的代码,自动执行某些操作。现实生活中,ATM自助取款机其实可以看作一个自动合约,把银行卡插进去,输入密码填写金额,就自动把钱吐出来,按照事先规定好的逻辑去做某些操作。所以智能合约其实并不智能,还挺笨的,一旦写好之后,就改不了了。实际上是一种代码合同。smart contract is anything but smart
。
Irrevocability is a double edged sword?
不可篡改性其实是一把双刃剑。一方面来说不可篡改性增加了合约的公信力,大家都只能按照合约的规则来,没有人能篡改规则,这是好的一方面;另一方面,如果规则中出现了漏洞,想要修补是很困难的。
Nothing is irrevocable?
有什么是真的不可篡改的。其实都是可以改的。以太坊的这种硬分叉操作不就是活生生的例子吗。代码是死的,人是活的。没有什么是绝对改不了的,连宪法都可以修宪。美国宪法甚至会有被推翻的例子,比如曾经的禁酒令,美国宪法第18修正案,Prohibition。大概执行了10几年,所以第21宪法修正案推翻了第18修正案。但是即便现在也不能户外喝酒,叫做open container laws
。
Is solidity the right programming language?
从语言设计上思考,为什么会出现重入攻击的情况,从某种意义上solidity这语言的特性是反自然的。一般的理解是,A给B转账,B是一个被动的接收者,不可能再回来调用A。但是solidity语言这个特性是说,A给B转账,等于阴性的调用你的fallback
函数,虽然表面上没用调用B的函数,但是阴性的调用了B的fallback,结果B又可以反过来调用A。有的人提出干脆使用函数式的编程语言,函数式语言比较安全,不容易出现这种漏洞。但是也是有待探讨的。
Many eyeball fallacy
代码是开源的,谁都能看到。但是实际有时间和精力去看源代码找漏洞的人是很少的。就是大多数都看了,但也不是每个人都有足够的专业知识能够检查出里面的漏洞。手机上也有钱包的应用,那使用这些钱包的人,有多少人是看过它的源码呢。有多少是看的懂的?所以不要认为开源软件一定比不开源的安全。有很多人用的软件也不一定没有安全漏洞。
What does decentralization mean?
还是The DAO的例子,以太坊团队为什么一个软件升级,就把那些人的钱不经过本人签名同意就转走。这岂不是比中心化更中心化。有些人是不满足现实的中心化方式,对去中心化非常热衷。
但是仔细想,以太坊硬分叉的方案真的是以太坊团队说的算么。以太坊没有手段让所有矿工都强行升级,最后硬分叉的成功是因为绝大多数的矿工自发的升级了软件,用行动支持了这个方案。即使是这样,还有一部分不同意的,还是继续留在旧链上挖矿,以太坊团队没有什么办法让他们强制转到新链上来。
所以去中心化,并不是全自动化,让机器决定一切,不能有人为的干预。去中心化并不是已经指定的规则不能修改,而是说对规则的修改要用去中心化的方式来完成。
Decentralized ≠ Distributed
去中心化跟分布式不是等价的。
一个去中心化的系统必然是分布式的。
但分布式不一定是去中心化的。即使这个系统运行在成千上万的计算机上,但这个应用是同一个组织所管辖的。就不叫做去中心化的。在分布式的平台上,可以运行一个中心化的应用,也可以运行去中心化的应用。
比特币和以太坊都是交易驱动的状态机。这种状态机的模式state machine,它的特点是让系统中几千台机器重复做同一组操作,付出很大的代价,来维护状态的一致性。这个并不是分布式系统常用的工作模式。大多数分布式系统是让每台机器做不同的事情,然后再把各个工作结果汇总起来,这样做的目的是解耦让整个系统运行的更快。