浅谈以太坊(1)——从比特币谈起
以太坊是如今市值排行第二的数字货币($121,550,682,511),仅次于比特币($199,595,835,652)。比特币是区块链的第一个应用,如果我们把它看做区块链1.0的话,那么以太坊就是把区块链带入2.0的应用。
以太坊到底解决了哪些问题,我们才说它把区块链的应用从1.0带入到2.0呢?这需要从比特币的脚本和他的限制说起。
脚本
在不对比特币的协议进行扩展的情况下,它也能在一定程度上实现智能合约(包含价值而且只有满足某些条件才能打开的加密箱子)。因为比特币的UTXO不只可以被一个公钥拥有,也可以被用基于堆栈的编程语言所编写的更加复杂的脚本所拥有。在后者模式下,花费UTXO,必须提供满足脚本的数据。
事实上,基本的公钥所有权机制也是通过脚本实现的:脚本将椭圆曲线签名作为输入,验证交易和拥有这一UTXO的地址,如果验证成功,返回1,否则返回0。
更加复杂的脚本用于其它不同的应用情况。例如,人们可以创建要求集齐三把私钥中的两把才能进行交易确认的脚本(多重签名),对公司账户、储蓄账户和某些商业代理来说,这种脚本是非常有用的;或者创建脚本来对解决某一计算问题的用户发送一定奖励;我们甚至可以创建这样的脚本“如果你能够提供你已经向我发送某一数量Ripple(市值排行第三的区块链应用)的证明,这一比特币UTXO就是你的了”——本质上,比特币系统允许不同的密码学货币进行去中心化的兑换。
限制
然而,比特币系统的脚本语言存在一些严重的限制:
- 缺少图灵完备性
尽管比特币脚本语言可以支持多种计算,但是它不能支持所有的计算。最主要的缺失是循环语句。不支持循环语句的目的是避免交易确认时出现无限循环。理论上,对于脚本程序员来说,这是可以克服的障碍,因为任何循环都可以用多次重复if 语句的方式来模拟,但是这样做会导致脚本空间利用上的低效率,例如,实施一个替代的椭圆曲线签名算法可能将需要256次重复的乘法,而每次都需要单独编码。
- 价值盲(Value-blindness)
UTXO脚本不能为账户的取款额度提供精细的的控制。例如,预言机合约(oracle contract)的一个强大应用是对冲合约,A和B各自向对冲合约中发送价值1000美元的比特币,30天以后,脚本向A发送价值1000美元的比特币,向B发送剩余的比特币。虽然实现对冲合约需要一个预言机(oracle)决定一比特币值多少美元,但是与现在完全中心化的解决方案相比,这一机制已经在减少信任和基础设施方面有了巨大的进步。然而,因为UTXO是不可分割的,为实现此合约,唯一的方法是非常低效地采用许多有不同面值的UTXO(例如对应于最大为30的每个k,有一个2^k的UTXO)并使预言机挑出正确的UTXO发送给A和B。
- 缺少状态
UTXO只能是已花费或者未花费状态,这就没有给需要任何其它内部状态的多阶段合约或者脚本留出生存空间。这使得实现多阶段期权合约、去中心化的交换要约或者两阶段加密承诺协议(对确保计算奖励非常必要)非常困难。这也意味着UTXO只能用于建立简单的、一次性的合约,而不是例如去中心化组织这样的有着更加复杂的状态的合约,使得元协议难以实现。二元状态与价值盲结合在一起意味着另一个重要的应用-取款限额-是不可能实现的。
- 区块链盲(Blockchain-blindness)
UTXO看不到区块链的数据,例如随机数和上一个区块的哈希。这一缺陷剥夺了脚本语言所拥有的基于随机性的潜在价值,严重地限制了博彩等其它领域应用。
需求
对于区块链,我们有着建立高级应用的需求。一般而言,建立高级应用有以下三种方法:
- 建立一个新的区块链
- 在比特币区块链上使用脚本
- 在比特币区块链上建立元币协议
建立新区块链的方法可以自由地实现任意的特性,但是开发的时间成本较高和并且需要努力地培育;使用脚本的方法非常容易实现和标准化,但是如前面所讲,它的能力有限;在比特币上建立元币协议尽管容易实现,但是它存在扩展性差的缺陷。
以太坊
以太坊目的就是建立一个能够同时具有这三种模式的所有优势的通用框架,它通过对这三种模式的概念进行整合和提高,实现使开发者能够创建任意的基于共识的、可扩展的、标准化的、特性完备的、易于开发的和协同的应用。
以太坊通过建立终极的抽象的基础层-内置有图灵完备编程语言的区块链-使得任何人都能够创建合约和去中心化应用并在其中设立他们自由定义的所有权规则、交易方式和状态转换函数。智能合约也能在以太坊上创建,并且因为图灵完备性、价值知晓(value-awareness)、区块链知晓(blockchain-awareness)和多状态等特性而比比特币脚本所能提供的智能合约强大得多。
Please upvote, resteem and follow me if you like it!
@alexma