理解比特币和Ethereum


POW和POS

比特币使用的是工作证明算法POW(Proof of Work),Ethereum在替换掉这个算法,使用的是POS持有量证明算法(Proof of Stake)。

所谓工作证明算法在比特币世界中就是说,你获得多少货币,取决于你挖矿贡献的有效工作,也就是说,你电脑性能越好,分给你的矿就会越多,这就是根据你的工作证明来执行货币的分配。大部分的虚拟货币,比如比特币、莱特币等等,都是基于POW模式的虚拟货币(算力越高、挖矿时间越长,你获得的货币就越多)。所谓工作证明算法提高了拜占庭将军问题1/3的上限,也就是比特币的51%攻击,比特币网络50%的容错率。如果一个人掌握了全网51%的算力,那么他就能操纵比特币区块账本,这也就不符合比特币去中心化的特点。

持有量证明算法(POS)简单来说,就是一个根据你持有货币的量和时间,给你发利息的一个制度,在股权证明POS模式下,有一个名词叫币龄,每个币每天产生1币龄,比如你持有100个币,总共持有了30天,那么,此时你的币龄就为3000,这个时候,如果你发现了一个POS区块,你的币龄就会被清空为0。你每被清空365币龄,你将会从区块中获得0.05个币的利息(可理解为年利率5%),那么在这个案例中,利息 = 3000 * 5% / 365 = 0.41个币,这下就很有意思了,持币有利息。不再需要为了安全产生区块而大量消耗电能,而比特币的POW算法会消耗大量电能。

ethereum-homestead-730x310.jpg

GAS

而且Ethereum在bitcoin script上加上了更加健全符合图灵完备的语言,简单来说中本聪在设计比特币的时候,bitcoin script的时候,没有循环语句,正是没有循环语句,所以就不存在死循环,而一段代码中是否存在是循环在计算机中是不能被发现的,这个被称为停机问题(Halting problem)。但是Ethereum是怎么解决这个问题的呢?Ethereum引入gas(瓦斯),执行每一行代码都需要消耗gas,gas是计算费用的方式,可以防止矿工执行到死循环脚本或者错误的代码。你设计的程序中犯的错误,只会影响付费使用它的人。其余的网络不能因为你的错误而遭受性能问题。 当性能问题消耗你的所有ether币时,他们将简单地得到一个 big payday! 没有这个关键技术,通用块链的想法是完全不可能的。GASPRICE是每一计算步骤需要支付矿工的费用。

与比特币相比,以太坊最大的不同点是:它可以支持更加强大的脚本语言(用技术语言讲就是图灵完备的脚本语言),允许开发者在上面开发任意应用,实现任意智能合约,这也是以太坊的最强大之处。作为平台,以太坊可以类比于苹果的应用商店,任何开发者都可以在上面开发应用,并出售给用户。

比特币10分钟出一个块是非常慢,Ethereum改进比特币的算法,出块时间为15s

差价合约

差价合约是一种金融交易工具,也就是保证金交易,就是对于不愿意承担风险的人用于转移风险的一种方式,而风险和收益都是对等的,有能力愿意承担风险的人也能获得与风险相对等的收益。比如我们有100个以太币,我们将这100个以太币以差价合约的形式交付给另外愿意收购的人上手上,每个币50刀,交付日期是一个月,也就是一个月之后不管以太币市价如何,我们都能得到500×100刀相对应金额的以太币。所以通过差价合约,可以产生价值稳定的货币。这相对于当下价值波动大的代币来说,是一个明显的进步。

Ethereum Virtual Machine (EVM)

以太坊虚拟机类似于java虚拟机,以太坊协议使用Go语言实现的,因为区块链的分布式和网络特性,所以Go语言是最合适的。 Solidity是一种语法类似JavaScript的高级语言。它被设计成以编译的方式生成以太坊虚拟机代码。编写智能合约就可以使用Solidity。 还有类似Python的语言Serpent。可以编译成EVM代码。

参考

1.http://teahour.fm/2016/01/19/talk-with-jan-about-ehtereum.html 2.http://ethfans.org/posts/smart-contract-best-practices 3.http://wiki.jikexueyuan.com/project/solidity-zh/