一个产品经理的区块链学习指南(三)

Posted by zhang on

一提起「区块链」,我们第一个想到的就是比特币,那么有了「比特币」为什么还需要「以太坊」呢?

「以太坊」是继「比特币」之后有一个「加密数字货币」。自2014年初Vitalik Buterin在北美比特币大会上首次谈及以太坊之后,这个新概念就得到了大众广泛的关注。另外,「以太坊」(Ethereum)已经是目前的第二大「加密数字货币」。

截止20180121数字加密货币市值排名

排名 加密货币名称 市值(单位:美元)
1 Bitcoin(比特币) $204,840,845,685
2 Ethereum(以太坊) $108,223,626,663
3 Ripple(瑞波币) $56,812,889,890
4 Bitcoin Cash(比特现金) $31,298,683,365
5 Cardano(ADA艾达币) $16,877,226,567
6 Litecoin(莱特币) $10,827,055,423

那么「以太坊」何德何能,可以占据数字加密货币的二当家呢?甚至有可能在未来超越「比特币」成为数字加密货币的「扛把子」。

以太坊不单单是一种「数字加密货币」,更是一个「平台」

「比特币」自从出现就一直被当作类似「黄金」一样的法币替代物,与「货币」一样,主要拥有价值尺度、流动手段和支付手段等职能。而「以太坊」成立的目的则是创建一个基于「智能合约」和「区块链」技术的去中心化应用开发平台。开发人员可以在其基础上构建新的应用,这些应用可以永久安全的运行,抗屏蔽/审查和自我维持。

我们可以用「高速公路」来类比「以太坊」网络。

我们都知道高速公路都是根据一系列规则来管理,每个人在使用时都必须遵守。比如:不得酒后驾驶,不能超载等等。公路网连接了路过的各个城镇和人群,它们使货物和服务的运输成为了可能。「以太坊」平台很像公路网,通过「以太坊」网络将各个节点连接起来,同时「以太坊」也有一套规则,可以用来建立新的业务、应用程序及通讯(我们把这些叫做「资产(Asset)」)等。

以太坊的「去中心化」

不过,高速公路是政府来管理和维护的,这意味着政府可以控制和限制人们使用高速公路,甚至完全切断通往某个城市的路。

但是在「以太坊」里则不会出现这种问题。它是一个「去中心化」网络,没有任何第三方可以控制这个网络。在这里,没有任何人可以限制你访问属于你的特定资产。这个系统可以确保人们在「完全无信任」的状态下来创建资产等等。

同时,如果你在「以太坊」网络里创建了一项资产,那么你可以放心,你可以安全地访问该资产,在此期间不会受到任何的审查或遭遇宕机。在目前的网络环境中显然不会实现「不受审查,不宕机」,这也让「以太坊」平台的价值所在。

但是「不受审查,不宕机」也可以建立在基于「比特币」的区块链网络上,毕竟上文提到的「以太坊」的优点都是基于「区块链」的特性,那么为什么在拥有「比特币」网络的情况下还需要「以太坊」呢?

「以太坊」优于「比特币」的地方在于它用来构建资产的工具。

「以太坊」的构建工具优势

我们都知道在开发一个软件的时候都需要写代码,我们都愿意使用一个「优雅」的开发语言来写代码。一个「优雅」的开发语言,可以让开发者更专注于最终产品,而不是花时间去学习如何使用这个语言。另外,一个「优雅」编程语言的一些特性可以帮助开发者编写更好的或者优化代码。

相比「比特币」原始的脚本语言,在以太坊中用来部署代码以及运行智能合约的语言更高级,拥有更多的特性,举个栗子:loop——循环。在开发中,我们经常会运用循环和条件来实现复杂的算法,比如求1+2+3+……+99+100的值是多少,如果没有循环,我们要把所有的数字都打出来,如果要是从1加到100w,那程序员会崩溃的。

但是「比特币」使用的脚本语言不!支!持!循环。。。

这些缺点意味着在「比特币」网络去构建的应用一般是开发者的研究项目,很难把注意力集中在最终的成品上。而且本来可以通过3行代码就可以完成的事情可能需要3k 行,这是迄今为止我们没有看到在「比特币」网络上的应用较少(很少)的重要原因。

而「以太坊」一开始就规划了「图灵完备」的编程语言,简单来说就是「以太坊」提供的语言可以使用计算机完成任何计算机可以完成的任务。因此「以太坊」吸引了很多开发者在其基础上开发应用程序。

另外,「比特币」的脚本语言还有一些其它的怪异结构(比如 UTXOs),使得构建某些功能的时候会变得异常困难(不是无法构建)。

UTXOs(未花费的交易输出)和Account(账户)

UTXOs 这个概念,我想很多人(即使是关注区块链技术的人)都很陌生。我第一次在比特币交易中接触到 UTXOs 概念时也花费了一段时间才了解它以及为什么要按照 UTXOs 来设计比特币交易。

在「比特币」交易的实际操作过程中,UTXOs 的存在使得在「比特币」网络上构建新应用变得非常复杂,而这种复杂性正是导致「以太坊」迅速发展的关键因素之一。

我们来看看什么是 UTXOs , 我们来想想下「比特币」网络交易的原则:

  1. 我发送的任何比特币金额都会被发送到一个发送地址——对方的钱包地址;
  2. 你接收到任何比特币金额都会被锁定到您的接受地址——我的钱包地址;
  3. 任何时候你花费(转账,发送)比特币,你花的金额都是来自于你以前收到但是未花费的资金;
  4. 通过钱包来接收和使用比特币

但是关于「比特币」,它们并不是存在于你的钱包当中,那你的钱包里到底有什么呢?

在你的钱包里存的是你从别人那里收到且未使用的每一个比特币交易记录(transaction and not spent yet)。在「比特币」网络中,有人给你发送比特币被称为「输出(outputs)」。这些未使用的交易输出被称为 UTXOs(Unspent Transaction Outputs)。

这些记录在进入的钱包时不会混淆或者相加,而是按照收到的方式进行存储。举个栗子:你收到了3个交易,每次交易分别为:交易1——1 btc, 交易2——2btc, 交易3——5btc。那么你的钱包里将显示3个单独的交易,分别为1,2,3个 btc。当然你的钱包余额是这些记录的总和——8btc,但是每一笔交易都是单独存储的——我咋想起来了「银行存管」,额,最近头有点大。

说完了 UTXOs,那么到底和「有了比特币为什么还需要以太坊」的问题有什么关系呢?

UTXOs 太复杂

我们接着举例子,你有8个 btc 了。你要给别人转账4 btc。理论上你是可以很轻松完成这笔交易的。但是事实真是如此么?图样图森破。

「比特币」网络使用UTXOs 模式使得比特币的脚本语言无法对比特币金额进行精确控制,从而实现转账。问题的复杂性全部交给你自己。

要转账4 btc 给别人,你首先要创建一个交易:
1. 你要先找到一个你之前收到但是未使用的交易(也就是 UTXOs);
2. 证明这个交易输入你
3. 利用对方的钱包地址(公钥)创建一个输出,作为转账目的地

看似还不是特别复杂,但是你要注意:你收到了3个交易,每次交易分别为:交易1——1 btc, 交易2——2btc, 交易3——5btc。3个交易中并没有一个4 btc 的交易,那怎么办呢?

在比特币脚本语言中,你没有办法直接操作:

证明交易3 属于我,并将5btc中的4个发送到指定的地址

相反,你需要将交易3的5个比特币全部花掉:将交易3进行拆分,分成4btc和1btc。4btc输出给对方,再创建另一个交易,将1btc 输出给自己。

同时,我们也说了比特币脚本语言并没有「循环」等图灵完备性功能,如果你想写一个比特币钱包的应用程序,「转账」这个功能将会非常复杂:查找用户钱包里所有的UTXOs——>将符合条件的 UTXOs 选出来作为一个集合,使这个集合中的 UTXOs 的综合大于或者等于交易的期望输出。

如果存在两个或者两个以上的 UTXOs 集合满足交易的期望输出,那么就需要进行额外的逻辑判断来决定使用哪个集合。显然这将使业务逻辑变得极为复杂。

当然,之所以选择 UTXOs 模式作为比特币的交易模式中本聪还有一定考虑的,比如高度的隐私、潜在的扩展性等等,但是却增加了应用程序的复杂性。因此需要更加优雅的语言来促进新应用程序的开发,「以太坊」填补了这个空白。

另外,UTXOs 从根本上来看只有两种模式——已使用和未使用。作为一个产品经理,你在实际工作中估计很少碰到这种只有两种状态的业务逻辑吧?

这种只有两种状态的逻辑,使得「比特币」网络在进行「多阶段智能合约」开发的时候变得更加困难——比如需要向多个用户提供应用程序,然后还有一些附加条件,并在程序执行的不同阶段按照附件条件及预定义的合约规定将资金分配给合适的各方。如果使用比特币脚本语言,这个看似只需要 if-else 和「循环」就可以解决的算法将变得值得大多数开发者进行深入研究。而「以太坊」则在这样一个智能合约的易用性方面要好的多。

我的看法

区块链技术如果能够广泛应用,一定是多种因素共同促成的。其中关键的因素在于「易用性」——普通人可以在区块链上非常方便的去创建新应用——而不是只有 geek 或者少数大牛。

之所以现在区块链技术还没有真正投入使用,正式因为没有一个简单的平台可以让大多数程序员去构建他们的东西,而「以太坊」无疑是为了解决这个问题而出现的。当我在阅读《 Ethereum:A Next-Generation Smart Contract and Decentralized Application Platform 》(以太坊(Ethereum ):下一代智能合约和去中心化应用平台)白皮书的时候,我相信了以太坊的价值,它很有可能在未来的区块链技术体系中占据重要的份额。