以太币:比特兄,其实即使不拓展你的底层协议,也能在一定程度上施行“智能合约”。
比特币:是的,不那么复杂的还是可以的。
以太币:你的UTXO可以既被公钥拥有,也可以被一个堆栈语言的复杂脚本拥有。在这样的模式下,交易要花费UTXO必须提供符合脚本语言的数据。事实上即使是公钥所有制的机制的施行也是基于脚本语言的。脚本把椭圆曲线的签名作为输入,把它和拥有UTXO的地址以及交易认证,如果认证成功就返回1,如果认证失败就返回。更加复杂的脚本用于不同种的应用情况。
比特币:比如说?
以太币:用户可以要求创建集齐三把私钥中的两把去确认交易,也就是多重签名。这个设置对合作的账户,安全节省的账户和商业代理是非常有效的。脚本也能被用于解决算力问题的赏金。甚至是用户能创建一个脚本说:如果你能提供一个简单确权SPV的证明,证明发送了一定数量的狗币给我,那么这个UTXO就是你的了。本质上允许去中心化的加密货币之间的兑换。
比特币:嗯,从这个角度看是能在一定程度上实行智能合约。
以太币:但是你这个脚本语言还四个严重的限制。
比特币:哦,是吗?愿闻其详。
以太币:第一点就是缺少图灵完备。也就是说。尽管你的脚本支持大量的计算,但并不代表支持一切。主要的缺失是循环语句。之前本聪兄这样设计的原因是避免在交易确认中无限循环。理论上,对于脚本程序员来说,它是可以克服的。由于任何循环都能通过一个带if语句的底层代码简单的重复很多次。但是这样会非常浪费空间。例如,实施一个可替代的椭圆曲线签名算法将要求256次重复的乘法,而且每次都是独立地包含在代码中。
比特币:有道理。这点本聪兄之前就考虑到了。那还有什么限制吗?
以太币:第二个限制就是价值盲。UTXO脚本不能提供区块的精确数值。例如,预言机合约(oracle contract)的一个强大应用是对冲合约。A和B各自向对冲合约发送价值1000美金的BTC,30天后,脚本给A发送价值1000美元的BTC,余额发给B。实现整个过程就要求一个预言机来决定1BTC等于多少USD。但即使是这样,对于现在的完全中心化来说,在信任和基础设施方面,已经取得了巨大的进步。然而,由于UTXO是不可分割的。唯一的方式就是非常低效的采用许多种不同面值的UTXO(比如对应于最大为30的每个k,有一个2^k的UTXO)可以使预言机挑选那个UTXO给A,那个UTXO给B。
比特币:是的,目前就是这么个情况。
以太币:第三个限制就是缺少状态。UTXO只能是花费或者未被花费状态。它对于内部状态的多阶段脚本和合约没有给任何的机会。这就使得他很难做出多阶段选择的合约,去中心化的交易和两阶段的加密协议(确保计算奖励很必要)。这也意味着UTXO只能用于一次性的,简单的合约。它不能用于一些如去中心化组织的更复杂的状态性合约。因此原协议很难实现。二元状态与价值盲合并就意味着另外一个重要的取款限制的应用是不可能的。
比特币:取款限制,确实是不可能。
以太币:最后一个限制就是区块链盲。UTXO是看不到区块链上的数据的,比如随机数,时间戳和上一个区块的哈希。这样的缺陷剥夺了脚本语言拥有的潜在随机价值,使其在博彩或其他领域的应用严重受限。
比特币:这几个限制找的非常准确,也为你的改进提供了很多思路。
以太币:是的。从这里我们可以看到基于加密货币建立更先进应用程序的三条路径。建立一个新的区块链,在你的基础上建立脚本,同时建立一个元协议。第二条路径是创建一个新的区块链,这个区块链允许无限制进入任何特性,开发的成本就是时间,反复测试培育和安全保证。使用脚本语言是容易施行和标准化的,但是受限于能力。元协议很简单但是存在扩展性差的缺陷。
比特币:是,这两种种都各有千秋,不好选择。
以太币:这里就要说到我啦。我们现在是要建立一个可替代的框架,它能在开发中带来最大的便利,也有更强大的轻客户资产,同时它还允许应用去分享经济环境和区块链的安全。
比特币:看来你们是综合了上面两条路径的优势,开发了一条更好的路径啊。
以太币:是的,谈了这么多天,明天我们好好讲讲我自己以太坊。
比特币:非常期待。
参考阅读
https://ethfans.org/posts/ethereum-whitepaper
https://github.com/ethereum/wiki/wiki/White-Paper
https://www.jianshu.com/p/4ce703c29db3
领取专属 10元无门槛券
私享最新 技术干货