比特币是啥?以太坊又是啥?两者间存在什么样的联系?又有哪些不一样呢? 一提起区块链,我们第一个想到的就是比特币,那么有了比特币为什么还需要以太坊呢? 以太坊是继比特币之后有一个加密数字货币。自2014年初VitalikButerin在北美比特币大会上首次谈及以太坊之后,这个新概念就得到了大众广泛的关注。另外,以太坊(Ethereum)已经是目前的第二大加密数字货币。 截止20180121数字加密货币市值排名 那么以太坊何德何能,可以占据数字加密货币的二当家呢?甚至有可能在未来超越比特币成为数字加密货币的扛把子。 以太坊不单单是一种数字加密货币,更是一个平台 比特币自从出现就一直被当作类似黄金一样的法币替代物,与货币一样,主要拥有价值尺度、流动手段和支付手段等职能。 而以太坊成立的目的则是创建一个基于智能合约和区块链技术的去中心化应用开发平台。开发人员可以在其基础上构建新的应用,这些应用可以永久安全的运行,抗屏蔽审查和自我维持。 我们可以用高速公路来类比以太坊网络。 我们都知道高速公路都是根据一系列规则来管理,每个人在使用时都必须遵守。比如:不得酒后驾驶,不能超载等等。公路网连接了路过的各个城镇和人群,它们使货物和服务的运输成为了可能。以太坊平台很像公路网,通过以太坊网络将各个节点连接起来,同时以太坊也有一套规则,可以用来建立新的业务、应用程序及通讯(我们把这些叫做资产(Asset))等。 以太坊的去中心化 不过,高速公路是政府来管理和维护的,这意味着政府可以控制和限制人们使用高速公路,甚至完全切断通往某个城市的路。 但是在以太坊里则不会出现这种问题。它是一个去中心化网络,没有任何第三方可以控制这个网络。在这里,没有任何人可以限制你访问属于你的特定资产。这个系统可以确保人们在完全无信任的状态下来创建资产等等。 同时,如果你在以太坊网络里创建了一项资产,那么你可以放心,你可以安全地访问该资产,在此期间不会受到任何的审查或遭遇宕机。在目前的网络环境中显然不会实现不受审查,不宕机,这也让以太坊平台的价值所在。 但是不受审查,不宕机也可以建立在基于比特币的区块链网络上,毕竟上文提到的以太坊的优点都是基于区块链的特性,那么为什么在拥有比特币网络的情况下还需要以太坊呢? 以太坊优于比特币的地方在于它用来构建资产的工具。 以太坊的构建工具优势 我们都知道在开发一个软件的时候都需要写代码,我们都愿意使用一个优雅的开发语言来写代码。一个优雅的开发语言,可以让开发者更专注于最终产品,而不是花时间去学习如何使用这个语言。另外,一个优雅编程语言的一些特性可以帮助开发者编写更好的或者优化代码。 相比比特币原始的脚本语言,在以太坊中用来部署代码以及运行智能合约的语言更高级,拥有更多的特性,举个栗子:loop循环。在开发中,我们经常会运用循环和条件来实现复杂的算法,比如求12399100的值是多少,如果没有循环,我们要把所有的数字都打出来,如果要是从1加到100w,那程序员会崩溃的。 但是比特币使用的脚本语言不!支!持!循环。 这些缺点意味着在比特币网络去构建的应用一般是开发者的研究项目,很难把注意力集中在最终的成品上。而且本来可以通过3行代码就可以完成的事情可能需要3k行,这是迄今为止我们没有看到在比特币网络上的应用较少(很少)的重要原因。 而以太坊一开始就规划了图灵完备的编程语言,简单来说就是以太坊提供的语言可以使用计算机完成任何计算机可以完成的任务。因此以太坊吸引了很多开发者在其基础上开发应用程序。 另外,比特币的脚本语言还有一些其它的怪异结构(比如UTXOs),使得构建某些功能的时候会变得异常困难(不是无法构建)。 UTXOs(未花费的交易输出)和Account(账户) UTXOs这个概念,我想很多人(即使是关注区块链技术的人)都很陌生。我第一次在比特币交易中接触到UTXOs概念时也花费了一段时间才了解它以及为什么要按照UTXOs来设计比特币交易。 在比特币交易的实际操作过程中,UTXOs的存在使得在比特币网络上构建新应用变得非常复杂,而这种复杂性正是导致以太坊迅速发展的关键因素之一。 我们来看看什么是UTXOs,我们来想想下比特币网络交易的原则: 我发送的任何比特币金额都会被发送到一个发送地址对方的钱包地址; 你接收到任何比特币金额都会被锁定到您的接受地址我的钱包地址; 任何时候你花费(转账,发送)比特币,你花的金额都是来自于你以前收到但是未花费的资金; 通过钱包来接收和使用比特币 但是关于比特币,它们并不是存在于你的钱包当中,那你的钱包里到底有什么呢? 在你的钱包里存的是你从别人那里收到且未使用的每一个比特币交易记录(transactionandnotspentyet)。在比特币网络中,有人给你发送比特币被称为输出(outputs)。这些未使用的交易输出被称为UTXOs(UnspentTransactionOutputs)。 这些记录在进入的钱包时不会混淆或者相加,而是按照收到的方式进行存储。举个栗子:你收到了3个交易,每次交易分别为:交易11btc,交易22btc,交易35btc。那么你的钱包里将显示3个单独的交易,分别为1,2,3个btc。当然你的钱包余额是这些记录的总和8btc,但是每一笔交易都是单独存储的我咋想起来了银行存管,额,最近头有点大。 说完了UTXOs,那么到底和有了比特币为什么还需要以太坊的问题有什么关系呢? UTXOs太复杂 我们接着举例子,你有8个btc了。你要给别人转账4btc。理论上你是可以很轻松完成这笔交易的。但是事实真是如此么?图样图森破。 比特币网络使用UTXOs模式使得比特币的脚本语言无法对比特币金额进行精确控制,从而实现转账。问题的复杂性全部交给你自己。 要转账4btc给别人,你首先要创建一个交易: 1。你要先找到一个你之前收到但是未使用的交易(也就是UTXOs); 2。证明这个交易输入你 3。利用对方的钱包地址(公钥)创建一个输出,作为转账目的地 看似还不是特别复杂,但是你要注意:你收到了3个交易,每次交易分别为:交易11btc,交易22btc,交易35btc。3个交易中并没有一个4btc的交易,那怎么办呢? 在比特币脚本语言中,你没有办法直接操作: 证明交易3属于我,并将5btc中的4个发送到指定的地址 相反,你需要将交易3的5个比特币全部花掉:将交易3进行拆分,分成4btc和1btc。4btc输出给对方,再创建另一个交易,将1btc输出给自己。 同时,我们也说了比特币脚本语言并没有循环等图灵完备性功能,如果你想写一个比特币钱包的应用程序,转账这个功能将会非常复杂:查找用户钱包里所有的UTXO将符合条件的UTXOs选出来作为一个集合,使这个集合中的UTXOs的综合大于或者等于交易的期望输出。 如果存在两个或者两个以上的UTXOs集合满足交易的期望输出,那么就需要进行额外的逻辑判断来决定使用哪个集合。显然这将使业务逻辑变得极为复杂。 当然,之所以选择UTXOs模式作为比特币的交易模式中本聪还有一定考虑的,比如高度的隐私、潜在的扩展性等等,但是却增加了应用程序的复杂性。因此需要更加优雅的语言来促进新应用程序的开发,以太坊填补了这个空白。 另外,UTXOs从根本上来看只有两种模式已使用和未使用。作为一个产品经理,你在实际工作中估计很少碰到这种只有两种状态的业务逻辑吧? 这种只有两种状态的逻辑,使得比特币网络在进行多阶段智能合约开发的时候变得更加困难比如需要向多个用户提供应用程序,然后还有一些附加条件,并在程序执行的不同阶段按照附件条件及预定义的合约规定将资金分配给合适的各方。如果使用比特币脚本语言,这个看似只需要ifelse和循环就可以解决的算法将变得值得大多数开发者进行深入研究。而以太坊则在这样一个智能合约的易用性方面要好的多。 我的看法 区块链技术如果能够广泛应用,一定是多种因素共同促成的。其中关键的因素在于易用性普通人可以在区块链上非常方便的去创建新应用而不是只有geek或者少数大牛。 之所以现在区块链技术还没有真正投入使用,正式因为没有一个简单的平台可以让大多数程序员去构建他们的东西,而以太坊无疑是为了解决这个问题而出现的。当我在阅读《Ethereum:ANextGenerationSmartContractandDecentralizedApplicationPlatform》(以太坊(Ethereum):下一代智能合约和去中心化应用平台)白皮书的时候,我相信了以太坊的价值,它很有可能在未来的区块链技术体系中占据重要的份额。 相关阅读 一个产品经理的区块链学习指南(一) 一个产品经理的区块链学习指南(二)