Echo | 以太坊简介(注释版)

编者注:本文原文写作于 2016 年,是许多人了解以太坊的入门材料。我们重译这篇文章,并加上一些注解,务求使入门材料也能跟上最新进展。旧译本见《一个基础的以太坊介绍》。

1

引言

以太坊的概念建立区块链和密码学货币之上,不熟悉区块链和比特币的读者可以先去看看《比特币的简介》和《区块链技术的简介》。本文假定读者对比特币的运行已有一定了解。

以太坊是什么哟?

以太坊是运行在计算机网络上的软件,使数据和一些叫智能合约的程序,在没有中央协调者的情况下,也可以在网络中复制与处理。以太坊的愿景是创造一种不会停机的、抗审查的、能自我维持的去中心化世界计算机。

相关信息请看以太坊基金会的为以太坊设立的公开网站:https://www.ethereum.org

比特币在世界范围内无数计算机上实现了交易数据的验证,复制和存储(因此也有人称之为 “分布式账本”)。而以太坊则把比特币中区块链的概念加以扩展,更进一步,希望在世界各地的无数计算机上同等无偏地运行计算机代码。

比特币实现了分布式的数据存储,以太坊则用同样的方式实现了分布式的数据存储和计算。(从整体来看),以太坊就像一台计算机,而上面运行的计算机程序我们叫做 “智能合约”。(从实际上来说),一个网络参与者乃是在他的电脑上用一种叫 “以太坊虚拟机” 的操作系统运行这些程序(“智能合约”)。

编者注:这样说更顺一点:有无数人在自己的计算机上运行以太坊客户端软件,这些电脑之间会相互通信、传递数据。只要这些数据符合一定的规则(“以太坊共识规则”),客户端软件就会按照一些规则来使用这些数据,具体来说,就是用这些数据在 EVM(“以太坊虚拟机”)(相当于 Windows 或者 Android)中运行一些程序(“智能合约”),然后得出结果。有趣的是,只要大家都遵守同样的规则并相互通信,无数节点得到的结果都是一样的(“共识”)(但达成共识一般需要时间,不是瞬时达成的)。

可以参照下图来理解:

stack-1

(最下面一层是相互通信,中间一层是对这些数据达成共识,最上面一层是用这些数据驱动应用程序的运行)

此外,这个过程还跟一个非常有意思的概念有关:“可信任计算”,指的是计算过程的可信任性。感兴趣的可以看《可信任计算的黎明》。

怎么 “运行” 以太坊呢?

你可以下载以太坊客户端(Ethereum client)软件。当然咯,如果你有足够的耐心,也可以自己写一个。类似于 BitTorrent 和 Bitcoin 这类软件,以太坊客户端会在互联网中把你和其他使用相同客户端软件的人连接起来,这样一来,你就可以从他们那下载以太坊的区块链了。以太坊客户端软件还将独立地验证收到的每个区块是否符合以太坊的规则。

以太坊客户端软件可以用于:

  • 连接以太坊的网络
  • 探索以太坊的区块链
  • 创建新的交易和智能合约
  • 运行智能合约
  • 挖掘新区块

编者注:所谓的 “区块链” 即是一系列的交易数据,这些交易是网络中所有计算机都确认过符合(当时的)规则并且执行过的(“交易” 主要是指密码学货币的转账)。而 “挖掘新区块” 的意思就是试图把一些数据传播出去让其它计算机也来执行,之所以叫 “区块” 是因为这时候这些交易是打包成一个数据块来传播的(别的时候,交易数据也可以独立传播)。

而平时我们说的 “区块链”,指的是一套让上述系统(所有计算机都保存并且执行了同样的交易数据)得以实现的技术(计算机交互协议)。

如此,你的计算机就化身为网络中的一个节点,运作着 “以太坊虚拟机” ,并且与所有其他节点行为一致。在点对点的网络上,不存在主服务器,任何电脑都有平等的权力和地位。

编者注:截至 2019 年 5 月,保存了完整以太坊区块链的节点(也称为 “全节点”),即上文所说的 “无数”,约为 6000 个。因为网络是开放的,节点的数量也会不断变化。

以太坊和比特币的相似之处

认为理解以太坊最简单的方法是对比以太坊和比特币(一个更简洁的系统)的相同点与不同点。事不宜迟,我们先说相同点。

以太坊也会形成一条区块链

像比特币一样,以太坊也会形成一条区块链,区块链包含着数据块(交易数据和智能合约代码)。某些参与者创建和挖出区块后,就分发给其他参与者去验证(这个区块的合规则性)。

要了解以太坊区块链都记录了什么信息,请看这个 “区块浏览器”:https://etherscan.io

每个区块都要引用零一个区块的哈希或着说 “数字指纹”,这样区块就会前后相接形成一条链。想了解更多区块链技术的详细介绍,请参阅:《区块链技术的简介

编者注:如上所述,参与者可以把一些数据组织成一个 “区块” 来传播,其它节点收到区块后会先验证这个区块符不符合我们预先确定的规则,符合就执行区块中的交易,不符合就会拒绝该区块:不执行其中的交易,也不再传播该区块。

关于 “哈希值”,简单理解就是一个函数的结果,相同的数据输进函数得到的结果一定相同,不同的数据输进函数得到的结果几乎可以说一定不同(相同的概率极低),因此可以用哈希值来标示。请看《Emoji 表情带你秒懂哈希函数

以太坊是无需许可的开放式网络

像比特币一样,以太坊主网是开放且无需许可的。任何人都可以通过下载的或者自己写的软件来连接网络,无需登录某个网站、无需向任何人报备,即可开始创建交易和智能合约、验证交易乃至挖矿(挖掘区块)。

一般而言,人们但凡谈到以太坊,指的都是这个无需许可的开放式版本。但是,和比特币一样,有了以太坊客户端软件后,你只需稍微追加一些设置,就可以建立与公共网络相互独立的私有网络。不过,目前私有网络中的代币和智能合约还不能与公共代币兼容。

想了解更多关于无需许可的开放式网络和私有权限网络之间的差别,请阅读:《不同类型的 “区块链”

以太坊用工作量证明(PoW)挖矿

和比特币一样,以太坊矿工在创建有效区块时需要求出一类数学难题的一个解,求解过程无章法可言,因此必须投入大量电力用计算机不断运算。

以太坊的工作量证明数学难题被称为 “Ethash”,它和比特币的 PoW 算法稍有不同。人们使用常见的硬件也可以参与 Ethash 挖矿。在比特币挖矿活动中,专用硬件(ASIC)十分常见,而以太坊的 Ethash 则在设计上削减了专用硬件的效率优势。

关于挖矿的更多资讯,请参见:《比特币挖矿的简介

编者注:具体而言,在 PoW 系统中,当挖矿者把交易打包之后会形成一个结构化数据(“区块头”)(交易不同则这部分结构化数据自然不同),区块头中还有一些别的数据,比如创建区块时的时间戳、父区块的哈希值,等等。而区块合规则性的要求就是区块头的哈希值(作为一个数值)符合一定的要求(“难度要求”)(比如比特币协议的难度要求是哈希值开头的 “0” 达到一定数量)。但是,如上所言,确定数据的哈希值是确定的,没有什么能保证仅凭上述数据可以产生一个符合要求的哈希值,因此出块者要不断改动其中一个没有特殊意义的数据(“区块 nonce”),直至区块头的哈希值符合难度要求(否则即使传播出去了,其它节点也不会接受这个区块)。

前文多次出现的 “打包交易”,意思等同于 “选择一组交易作为区块的内容”,因为在同一时间可能有很多人希望发起交易,但区块链系统为了安全,对区块大小作了限制(比如限制了区块的数据量大小或计算量总上限,见下文),因此挖矿者必须在自己接收到的待上链交易池(“pending tx” or “memory pool”)中选择部分交易组成一个区块,然后如上文所说形成结构化数据并开始挖矿。

在以太坊的路线图上,有一个叫 Casper 的协议计划,它一改耗电的工作量证明,摇身变为更节能的权益证明,会在以太坊未来的 “宁静(Serenity)” 版本中发布。

编者注:所谓权益证明(PoS),即是用参与者在一个资金池中的资金比重来确定 TA 的出块概率,参与者之间不再比拼谁先算出符合难度的哈希值,自然也就不需要投入大量电力来计算了。

自 2014 年来,以太坊核心开发团队就一直在研究权益证明共识机制。截至此时(2019 年 5 月),在以太坊主网上实现的权益证明方案 Casper 已基本敲定,有望于 2019 年末完成部署,翻开以太坊的全新篇章。

以太坊有一种内置的密码学货币

以太坊的代币叫 Ether,英文缩写为 ETH。现在的市场已经接受拿 ETH 与其它密码学货币和主权货币相交换,就像接受 BTC 一样。ETH 当前价值约为 13 美元/ETH(2016 年 10 月)。与比特币类似,以太坊代币的所有权也记录在以太坊区块链上,虽然技术层面上严格来说,记录的方式稍有不同。

编者注:这里的重点是,内置的密码学货币是随着区块的挖出而发放的:每出一个块,就把(预先确定好)一定数量的密码学货币发放给挖出区块的人(“矿工”)。

上文提到很多次的 “交易”,在比特币区块链上主要是指比特币的转账交易,而在以太坊上则更为多样,主要包括 ETH 的转账、用户与智能合约的交互、以及智能合约所发行代币的转移。

自原文成章以来,ETH 的价格已经从 13 美元(约 87 元)开始一路上涨,最高曾到达 1347 美元的高位(约 9000 元)(2018 年 1 月)然后逐渐下跌至 100 美元左右(2018 年 10 月),现又开始逐渐回升至 250 美元(2019 年 5 月)。此外,密码学货币对法定货币的价格几乎每天都在大幅波动。

以太坊和比特币的不同之处

准备好小板凳,我们要开启更技术也更复杂的话题了。

以太坊的出块时间更短

在以太坊网络中,每个区块之间的时间间隔大概是 14 秒,而比特币的区块间隔时间约为 10 分钟。这个时间差意味着,如果你同时发了比特币交易和以太坊交易,一般而言,把以太坊交易记录到以太坊区块链的速度要比比特币交易记录到比特币区块链的速度要快。我们也可以将这一点理解为,比特币网络每 10 分钟写一次数据库,而以太坊网络每 14 秒写一次数据库。

编者注:虽然在比特币和以太坊在这一点上有所不同,但具备这种属性的原理都是一样的:它们是 PoW 系统。如上所述,无数计算机处在一个开放式的网络中,所有计算机都随时可以退出,也可以随时加入,那么这就带来一个严肃的问题:如果所有计算机各自为政,自己接收到数据就处理,那么这些计算机就不能形成 “共识”,整个系统也无法实现基本的功能(比如货币转账,因为各有各记载的交易历史,谁也无法确定某个账户到底有多少钱)。因此,PoW 的意义等于是说:如果你要在这个账本上记一笔,请先证明你花费了很多计算资源。辅之以 “难度要求” 的变化,我们可以实现对出块所需工作量的调整,进而调整个网络的出块间隔。为什么要实现这种稳定的出块间隔可能有很多理由,这里不详细展开了。

以太坊的区块更小

比特币中,区块大小的上限以字节为单位衡量,目前为 1MB,而以太坊则用衡量智能合约计算复杂度的单位来标示区块的大小,这个大小被称为 “区块 Gas 上限”,而且区块 Gas 上限可以逐块变化(比特币的区块大小上限是一定的)。

目前,以太坊的区块大小上限约为 1,500,000 Gas。在用户之间(即不与智能合约交互),通过 ETH 达成的基础交易或支付有 21,000 Gas 的复杂度,因此,你可以把 70 单交易放进一个区块中(1,500,000 除以 21,000)。在今天的比特币网络中,一个区块可以包含 1500-2000 单交易。

就数据而言,目前大多数以太坊的区块都在 2KB 以下。

编者注:截至 2019 年 5 月 17 日,以太坊区块的 Gas 上限已达到 800 万 Gas。单块数据量大小是几百 KB。

以太坊使用 EVM 来运行智能合约

相比于比特币原始的脚本语言,以太坊上可以部署部署的代码(“智能合约”)对开发者而言更先进也更友好。智能合约代码运行在以太坊虚拟机环境中,而网络中所有的计算机都运行着 EVM。如果你熟悉 Microsoft Excel 宏(由 Excel 运行的代码段),你应该很容易理解,智能合约就是由以太坊虚拟机运行的代码段。

在很多资料中,人们通常把以太坊智能合约被称为 “图灵完备”(Turing complete)的。这意味着智能合约功能完整,可以执行其他编程语言中能够执行的所有计算。

以太币的发行

ETH 是怎么产生的呢?ETH 和 BTC 发币最大的不同在于—— BTC 大约每 4 年发行量减半一次,而 ETH 的发行量则保持不变(也许只是在 Serenity 版本以前)。

ETH 是怎么产生的呢?ETH 和 BTC 发币最大的不同在于—— BTC 大约每 4 年发行量减半一次,而 ETH 的发行量则保持不变(也许只是在 Serenity 版本以前)。

编者注:并不是保持不变。如上所述,在区块链上,原生密码学货币是每出块便增发一次,这个增发数量我们称为 “区块奖励”。以太坊的区块奖励也已经过多次削减,在 2017 年 10 月,区块奖励由 5 个削减到 3 个 ETH,2019 年 2 月,以太坊区块奖励削减为 2 个。因此,我在这里用 ETH 供应量的实际变化图来替代作者的原图。

这比 Bitcoin 要复杂得多。概言之,现存的 ETH 币计算公式如下:

预挖矿(Pre-mine)+ 区块奖励(Block rewards) + 叔块奖励(Uncle rewards) + 叔块引用奖励(Uncle referencing rewards)

预挖矿

在 2014 年 7 月和 8 月的众筹中,发行的 ETH 数量约为 7200 万。众筹中产生的 ETH 被称为 “预挖矿”。人们决定,众筹之后 ETH 的发行量将被限制在每年不超过众筹总量的 25% (也就是说,除了众筹一次性产生的约 7200 万 ETH 外,每年的 ETH 发行量不超过 1800 万)。

区块奖励

目前,挖出一个区块可以获得 5 个新的 ETH 。如果每 14 秒开采一个区块,一年有 3150 万秒(365x24x60x60),这意味着每年可挖出 225 万个区块。225 万 个区块,每区块 5 ETH = 1130 万 ETH /年。这符合每年产生不到 1800 万个 ETH 的承诺。

叔块奖励

实际上 ETH 的发行量会稍大于1800 万。由于一些区块挖得比较晚,因而没有成为主链的一部分。在比特币网络中,我们把这些挖得稍晚的区块叫 “孤块”,是完全抛弃掉的,但是在以太坊中,这些区块被称为 “叔块”,而且后续区块可以引用这些 “叔块”。如果有人引用某个 “叔块”,就会给挖出 “叔块” 的矿工带来 4.375 ETH 的 “叔块奖励”(相当于八分之七的正常区块奖励)。目前,以太坊每天约产生 500 个叔块,即每天有额外的 2,000 ETH 进入流通(按这个速度,每年会额外发行约 700 万 ETH )。

引用叔块的奖励

在一个叔块后出块的矿工,也可以得到 0.15ETH (最多引用 2 个叔块)。

上面描述的这个模型被称为 Ghost 协议,(Ghost 即 ”贪婪的最大权重观察子树“ 缩写)。在 Ghost 协议当中,有效的块是确定的,矿工也可以得到奖励。

编者注:叔块奖励是很多朋友理解中的难点,确实需要不少背景知识。简单来说就是:在网络中,传播区块是需要时间的,因此某个块挖出之后,在一定时间内可能只有一部分节点收到了这个区块,而另一些节点在这期间收到了另一个区块并把它当成了最新区块,PoW 系统所用的共识算法是没法当下就判断清楚哪个是主链的。以太坊的出块速度比较快,这种情况可能经常发生,因此在共识算法上安排了这种经济激励来缓解这种情形——即使出现了叔块,主链还是基本确定的。详情请看《以太坊设计原理

未来以太币的产量变化

在以太坊从工作量证明(包括叔块奖励规则)变为的权益证明机制时,机制的变化对发行的影响暂时还无定论。权益证明机制将使用一个名为 Casper 的协议(是的,就是那个鬼马小精灵,谁还敢说 cryptonerds 没有幽默感?)。在 Casper 协议下的 ETH 发行率很可能地远低于 Ghost 协议下的发行率。

挖矿奖励

那么,矿工可以在挖矿中得到什么?

在比特币中,每挖到一个新的区块,矿工会得到 12.5 个比特币(这是当前的情形);另外,还有打包在区块中的交易的发起人附带给矿工的手续费。

在以太坊,矿工可以得到:

  • 挖到一个新的区块会奖励 5 个以太币(或者一个叔块会奖励 4.375 个以太币);
  • 另外,用于引用至多两个叔块另外一个小奖励, (1/32 个区块奖励,即:每个叔块奖励 1/32×5 ETH = 0.15625 个以太币);
  • 交易发起者为合约运行和转账而支付的 Gas 费用

目前,每个区块平均的 Gas 上限为 1,500,000,区块网络中每个 Gas 的平均价格是 0.000000022 个以太币,也就是说,一个矿工可能从一个整个区块中得到的 Gas 奖励是 0.033 个以太币。需要注意的是,合约中的 Gas 是用流通中的以太币支付的,而非用新创造的以太币支付的。

编者注:发起交易者需要自己为交易设置 Gas 价格(即愿意为每单位 Gas 支付多少费用),这个 Gas Price 会成为矿工选择是否打包该交易的依据之一。因为人们对交易的需求不是时时都一样的,Gas Price 也会随当前人们对交易上链需求的改变而波动。

以太坊的其他部分:Swarm 和 Whisper

计算机需要 计算储存数据 和 交互。以太坊需要有效且稳健的方式,才能实现不停机、抗审查且自我维持的去中心世界计算机这一愿景。以太坊虚拟机器仅仅是整体中的一个元件。

  • 以太坊虚拟机是能运行合约逻辑的计算原件。
    • 这种 计算 不依赖中央服务器
  • 和 BitTorrent 一样,Swarm 协议是点对点的文件共享协议,不同的是它以小额以太币支付来激励文件存储和分享。文件被分成块,在网络参与者之间分发和存储。存储和传播数据块的节点可以从请求存储和检索服务者处得到 ETH 作为报酬。
    • Swarm 协议的 文件储存 不依赖于中央处理器
  • Whisper 是一种加密通讯协议,允许节点间安全地直接发送信息,还能帮助信息发送者和信息接受者屏蔽掉多余的第三方
    • Whisper 协议的 通讯 也无需依赖于中央服务器

以太坊诸概念

智能合约

智能合约是储存在以太坊区块链上的小程序。用适量的以太币即可激活并运行这些程序(编者注:也可能需要其它特殊的 Token 才能激活)。更多关于智能合约的资讯,详情请看:《智能合约简介

这里有一个引自维基百科,关于智能合约的实例:

-图片来源:https://en.wikipedia.org/wiki/Solidity –

在以太坊中,你可以创建一个包含代码的新帐户,并在交易中将其上传到以太坊的区块链上,从而建立一个智能合约。

只要合约上传成功,就会像自动点唱机一样:想要运行合约时,只需要给它发送一个包含以太币支付的交易,当然可能还需要额外提供另一些信息。

每一台挖矿电脑会用以太坊虚拟机来运行智能合约(这是他们挖矿过程的一部分),并得出最终的输出值。理论上,如果没有人使坏,以太坊网络上的每台电脑都会输出一样的结果,因为用户都运行着包含相同信息的智能合约代码。

挖出区块后,获胜的矿工会向网络的其他用户公布挖到的块,其他矿工纷纷验证并在得到相同的结果后,把该区块块放到他们的区块链中。这就是更新以太坊的区块链状态的方式。

账户

在比特币中,人们把储存比特币的地方称为 “地址(address)”,它就像银行账户,只不过存的是比特币。在以太坊中,用于储存以太币的叫 “账户(accounts)”,账户有两种:

叔块和孤块:差一点就上主链的块

以太坊的区块生成率远高于比特币的区块生成率(以太坊种每小时可生成 250 个区块 vs 比特币中每小时可生成 6 个区块)。区块生成得越快,“区块冲突” 的概率就会上升,即:许多有效的区块几乎同时生成,但是它们之中,仅有一块可以放在主链中。从技术上来说,尽管这些未上主链的区块包含的交易都是真实的,但是这些数据不能被认定为主链的一部分。

在比特币协议中,这类未上主链的区块被称为 “孤块”,孤块不是主链的组成部分,而且也不会被主链上的区块引用。

而在以太坊中,这些区块被称为 “叔块”,后续一段距离内的区块可以引用叔块(详见上文 “以太币的发行” 部分)。虽然叔块中的数据最终也不会派上用场(即叔块上的交易不会得到执行),挖出叔块的矿工还是可以获得稍小一些的区块奖励。

这促成了两个重要结果:

  1. 这会激励矿工保持挖矿动力,即使挖出的区块不能上主链(因为高速的区块生成率生成了更多的孤块和叔块)
  2. 承认创建叔块所花费的能源还可以提高区块链的安全性

编者注:总而言之,Ghost 是快速出块过程中的一种保护措施,让没有挖到主链块的矿工也不至于承受大量损失,有动力去维护主链。

Gas 和 Gas Price

激活一个智能合约时,你等于是请求整个网络中的所有矿工都来执行合约中的计算工作。这会花费矿工的时间和能源,用户理所当然得给他们报酬。Gas 就是支付服务费的机制。

手续费一般是一笔小额的以太币,想要运行合约,就需要给矿工支付来让他们工作。这类似于给自动点唱机投币。

付款项(单位:以太币)= 实际使用的 Gas 数量(单位:Gas)* Gas 价格(单位:以太币/Gas)

Gas 数量

智能合约越复杂(计算步骤的数量和类型、储存量的大小等),完成合约运行所需的 Gas 就越多。还用投币点唱机来类比的话,就好比点的歌越久,唱得越大声,需要支付的费用就越多。

Gas 价格

虽然合约的复杂程度各有差别,但运行具体一个合约所需的 Gas 数量是固定的,(手续费大小差异主要来源于 Gas 价格),而 Gas 价格是由希望运行合约的人在请求运行合约时所指定的(有点像比特币的交易费用)。矿工会看开出的 Gas 价格高低来决定他们愿不愿意运行合约。如果想让矿工运行合约,开出高价就好。可以说,Gas 市场是一个竞争激烈的拍卖场,就看用户愿意为运行智能合约付出多大成本了。

为什么需要 Gas 机制?

运行智能合约需要花费 Gas/以太币/金钱,有效防止了人们随意激活合约,从而避免了在免费运行的情况下可能出现的类似垃圾交易拥堵网络的问题。

编者注:这里没有言明的一点是,其实交易的 Gas 数量和 Gas 价格都是可以由用户自由调整的。如果没有给够 Gas 数量,无法完成合约中的计算,那么系统会完全回退,就当这笔交易没有发生过,虽然 Gas 费用还是会全部交给矿工;如果给的 Gas 数量太多,那么完成相关计算后,剩余的 Gas 费用会自动退还给发起交易的账户。

以太币的单位

好比于一美元可以分成 100 美分,一比特币可以分成 100,000,000 sataoshi,以太币也有专有的单位命名规则。

以太币最小的单位是 wei ,每一以太币等于 1000,000,000,000,000,000 wei,还有其他单位,如:Finney、Szabo、Shannon、Babbage 和 Ada。这些命名都来源于为密码学货币和网络作出卓越贡献的科学家。

Wei 和 Ether 是两种最常见的货币面额。

智能合约的语言:Solidity / Serpent, LLL

智能合约有三种通用语言,都可编译成智能合约并在以太坊虚拟机上运行。这三种语言分别是:

  • Solidity ——类似 Javascrip 的语言,是目前最流行的、具有强大功能的智能合约的脚本语言。
  • Serpent ——类似 Python 的语言,在以太坊发展早期比较常用。
  • LLL——类似于 Lisp,仅用于较为早期的语言编写中。LLL 或许是最难编写的语言。

编者注:截至今日(2019 年 5 月 17 日),Solidity 已经成为以太坊生态中最常用的合约编程语言。而其余两种语言很少有人使用,甚至已经被弃用。此外,以太坊正在研究将以太坊虚拟机 EVM 升级为 eWASM,而 WebAssembly 支持很多高级计算机语言的开发,有望进一步加强以太坊合约编写的友好性和安全性。

另,有人指出不应该先入为主地认为 Solidity 与 Javascript 很相似,这样在学习过程中会陷入很多误区。

以太坊软件:geth, eth, pyethapp

以太坊的官方客户端都是开源的,因此你可以看到背后的代码,还可以拿来调整一下创建自己的客户端。最流行的客户端如下:

以上都是基于命令行的程序(就是那种在黑色背景上的绿色文字),因此要想使用图形界面就需要使用别的软件。目前官方最流行的图形界面软件是 Mist(https://github.com/ethereum/mist)。Mist 以 geth 和 eth 为内核。

也就是说,geth 和 eth 是底层难看的代码,而 Mist 就是运行其上的漂亮界面。

编者注:2019 年 3 月,Mist 项目停止运营,团队拆分并转向不同领域。而以太坊生态中最常见的两款客户端 Geth 和 Parity·Ethereum 也已发展得相当不错,都已有了完备的图形界面。

足迹:以太坊之大事年表

2013 年底,Vitalik Buterin 在白皮书中论述了 “以太坊” 这一概念。2014 年 4 月,Gavin Wood 博士在黄皮书中进一步地阐发了这个概念。自此,以太坊的开发就由一个开发者社区来管理了。

同年的 7 月和 8 月,以太坊为开发众筹,其开放式主网于 2015 年 7 月 30 日上线。

以太坊的众筹

2014 年 7 月至 8 月期间,开发团队通过在线销售 ETH 代币获得资金——人们可以用比特币来购买 ETH ,当时的兑换比率为 2000 ETH : 1 BTC(到 2016 年 1 月,在开放市场中1 BTC 可以兑换 50 ETH)。

参与众筹的人可以用比特币账户支付,然后收到一个包含相应数量以太币的钱包。更多关于技术方面的信息,请参看以太坊博客:https://blog.ethereum.org/2014/07/22/launching-the-ether-sale/

在此期间,以太坊团队售出了 6000 多万以太币,收到了 31500 多的比特币,当时价值约 1800 万美元。团队又挖出了 20%(1200 万 ETH)用于支持开发和以太坊基金会。

软件发布代号:Frontier / Homestead / Metropolis / Serenity

以太坊软件的命名很有意思哦,是不是有点像苹果的 OS X 版本名称 Mavericks、El Capitan、Sierra 呐?

  • Olympic(测试网络):在 2015 年 2 月发布,测试发布时,其代币并不是真的以太币。如今,测试网仍然与主活动网络并行,以便开发人员测试代码。
  • Frontier:在 2015 年 7 月 30 日发布,Frontier 是首个可以挖矿、开发、运行合约的在线版本。
  • Homestead:于 2016 年 3月 14 日发布,有一些协议的更改,更加稳定。
  • Metropolis:未发布——从命令行界面升级到图形界面。
  • Serenity:未发布——从工作量证明升级到权益证明(Casper)。

编者注:上述代号也被认为是以太坊的路线图和发展的不同阶段。在原文成章的时候(2016 年 10 月),Metropolis(“大都会”)阶段还未发布。2017 年 10 月,Metropolis 的第一阶段 Byzantine(“拜占庭”)发布;2019 年 2 月,Metropolis 第二阶段 Constantinople(“君士坦丁堡”)发布,并且,有望于 2019 年末进入 Serenity 的第一阶段。

总结

以太坊开发团队致力于建立一个不会停机、抗审查和去中心的世界计算机,能运行计算、储存数据并允许交互。

以太坊有一个 公开、无需许可的开源版本,其代码副本已被采用并改编为私人网络。公有版本和私人网络要解决的是不同的问题。

尽管目前的技术尚未成熟,但是,我们相信经过越来越多人使用、测试、发展并在以太坊上开发软件,它会发展得越来越稳健。

在区块链世界里,以太坊是最振奋人心的的技术之一,未来的发展值得我们去期待。

10 月 3 日 更新:

有人评论说我没有介绍关于 The DAO(一个 “去中心化自治组织” )的内容。The DAO 类似于基于大众风险投资基金的智能合约。有黑客钻了智能合约中编码漏洞的空子,转走了智能合约中的资金。我也没有谈到 “以太坊经典”(Ethereum Classic)。2016 年 7 月 20 日,黑客入侵 The DAO,出于对以太坊核心开发者应对策略的反对,Ethereum Classic 从主链中独立了出来,成为另一条公链。以太经典有名为 ETC 的独立货币,ETC 和 ETH 在第 1920 块之前共享同一段区块链。

本文意在简介以太坊,而 DAO 和 Ethereum Classic 都是进阶话题,感兴趣的读者可以阅读拙著《比特币和区块链的基础》作进一步的了解。


原文链接: https://bitsonblocks.net/2016/10/02/gentle-introduction-ethereum/
作者: Bits on Blocks
翻译&校对: ViolaH & Elisa

区块链技术的商业潜力与局限

在技术浪潮里,判断需要某种预见力,不理解技术,难以感知它的潜力与局限。

如果你站在这里,正拿着 100 枚比特币,怎么办?

我相信你会有一个好选择。

但身处其中时,你其实看不见曲线右边,真实处境可能是:

一方面,“一直以来的上涨”令认知处于放松状态,你会选择继续持有。

按照卡尼曼的理论,认知放松时,我们往往用「系统 1 」思考问题,套用一些成型的印象,快速得出错误结论。

另一方面,应用寥寥,内心难免认为这是一场随时破裂的泡沫。《财经》披露:

ICO 公司找到出海中介机构时,大部分只问两个问题:“多少钱?要多久?”但陈润飞注意到,他们对花费并不在意,最在意的是时间,甚至大半夜也来电催促。

两种截然相反的预期令人焦虑。我们常高估新技术未来两年的影响,但在泡沫破碎后却迅速陷入悲观,低估它未来十年的价值。

错误预期的本质是,我们关注价格而非价值,但价格似随机波浪,并不是一件容易确定的事。

回到互联网早期,你会发现,此刻像极上世纪末的泡沫。当时大家对以 e 开头或以 .com 结尾的公司过分乐观。

作为唯一穿越 Web1.0 泡沫的巨头,亚马逊的早期股价走势也复制了 Gartner 技术炒作曲线。

泡沫破裂后,遭到抛售。

但放宽时间线,你会发现,那是一段可以忽略的波动:

事实上,贝佐斯当时的战略把控力、市场敏锐度与今并无二异,若看清长期价值,抛售显然不合理。

1. 如何把握技术的长期价值?

上篇文章(美团商业模式)的逻辑不同,技术带来的是一种不确定性机会。

它会重新定义稀缺资源。

  • 有可能颠覆围绕旧稀缺资源的市场,
  • 有可能创造新市场。
  • 然而,如果你没有匹配技术的好业务范式,更有可能一地鸡毛。

在技术浪潮里,判断需要某种预见力,不理解技术,难以感知它的潜力与局限。

区块链技术最先应用于比特币,但它并不是中本聪从 0 到 1 的发明产物,而是多领域成果的组合。

一旦拆解,你会觉得非常熟悉。它的技术核心只有 3 点:

2. 技术一:基于密码学的数据链

我宣称自己有“一枚 BTC”,然后发送给你。

如果把“一枚 BTC”理解成一则信息,你会发现,发送过程很像电子邮件:

以比特币的区块链为例:发送“一枚 BTC”时,我会用私钥(SK)生成一个数字签名附在后面。

当你用我的公钥(VK)验证签名,会发现这“一枚 BTC”确是我给你的。

私钥只有自己知道,如:

1b0be2162cedb2744d016943bb14e71de6af95a63af3790d6b41b1e719dc5c66

私钥经过数学转换后,生成一个公钥:

0x6c2ecd6388c550e8d99ada34a1cd55bedd052ad9

公钥虽然公开,但你无法从之推测私钥。它可以作为接收比特币的区块链地址,也可以解锁私钥签署的数字签名。

不同的是,“一枚 BTC”的信息量更大,它包含了流动记录。

若把 12 点发生的记录打包成区块(Block),然后盖上基于 11 点那个区块产生的时间戳,那么每个区块都是对前一个区块的增强,这样就形成了一个链条(Chain)。此即区块链(Blockchain)。

“一枚 BTC”包含的流动记录可以在这里得到检验。

所以,互联网的数字信息可以复制粘贴,但区块链里绝不会有相同的“一枚 BTC”。

这种基于密码学的数据链技术意味着:

a. 保障信息的可靠性上,区块链用密码学而不是第三方提供的信用;

  • 消减了信用成本。
  • 你不必提供与交易“一枚 BTC”无关的信息,比如你的姓名性别居住地。

b. 区块链里的信息可追溯,实现了数字资产确权;

潜在问题是:

c. 在简洁的区块链里,交易信息是透明的。

  • 若交易信息本身的价值高于信用成本,有必要用区块链吗?
  • 当然,不少企业级区块链用增加新模块的方式,完成了交易细节保密。比如 JP 摩根的 Quorum 平台预审身份,又如微软的 Coco 框架提供了可信计算。既然不用区块链即可解决信用问题,为何不选择效率更高的分布式数据库?

3. 案例:低成本颠覆

a. 在保障信息的可靠性上,区块链用密码学而不是第三方提供的信用。消减了信用成本。

在现有金融交易中,交易个体并不充分信任。信用担保、复杂交易处理都是稀缺资源,一般只有大型金融组织才能提供。

所以,跨境支付时,付款人的平均成本是转账金额的 7.68%(世界银行数据)。

当区块链提供了基于密码学的新交易方式,旧资源不再稀缺。

下图是比特币今年四月的一笔交易,转账成本是 0.33%

site:blockchain.info

不过,虽然区块链技术很赞,但比特币的 PoW 等交易设计还不够好。

直观体现是:跨境支付,肯定用;日常转账,未必,毕竟支付宝只收取 0.1% 的费用。

当然,有一些数字货币的交易成本低于比特币,比如免手续费的 EOS。

这里我只提比特币,是因为对比上述 3 个数据,你会发现:

技术能否应用,成本是一个好度量尺。

动力源从马到汽车,很赞,但只是技术进步;当城市交通从石板路到轨道交通,才有商业价值。

所以,扩容之争中,V 神(以太坊创始人)会说,使用数字货币要支付“50 美元的费用,只能被视作失败”。

4. 技术二:网络节点可延展成一份智能合约

如果把发送“一枚 BTC”理解成输入,你会发现,Bob 这个接收节点实际是在执行一段程序:

智能合约正是基于此。

以太坊的网络节点有两种类型,一是私钥控制的货币账户,二是代码控制的账户,即智能合约。

V 神在白皮书里的定义是:

智能合约更像是住在 EVM (虚拟机)的机器人,当收到输入(消息或交易)时,自动执行特定代码,并修改相关地址的余额或信息。

第二类账户同样有地址,

  • 可接收、转出货币;
  • 可存储、更新信息;
  • 还可同其他智能合约交流,比如在一个面向对象的编程中,实现共同目标,构建一款 DApp。

简言之,以太坊引入虚拟机后,把区块链的应用范围从加密货币拓展至了应用平台,任何人都可以在上面搭建应用。

这件事的意义是:

d. 把重新定义稀缺资源级别的技术从金融领域扩展到其他行业,想象空间无限变大。

  • 如果借助区块链可实现 app 功能,你是否还愿意选择抽佣的 app store 和 google play?
  • 以太坊推出 ERC2.0 接口后,大量团队涌入以太坊,ICO 导致 ETH 被推涨了 100 倍。
  • 开发平台的发展速度极快。以太坊后,EOS 又推出了免手续费、扩容性更强的开发平台。

但在热潮之中,我仍有所疑虑:

e. 此刻似乎不是所有行业都适合。

  • 在我看来,区块链与 TCP/IP 不可分割,它是某种信息传递的进阶版。
  • 和上篇文章分析科技巨头诞生时机的逻辑一样。此刻,线下业务占比重的行业适合开发 DApp 吗?

5. 案例:Facebook 式危机

越来越多的人认为 Facebook 是一个聚合器:

  • 免费使用媒体生产的内容,然后用信息流吸引用户。
  • 免费获取用户的数据,然后用广告变现。

在互联网时代,它的优势很难被突破。因为:

  • Facebook 上有大量用户,媒体需要获取关注。而且生产者无法阻止内容被复制粘贴。
  • 你的朋友都在 Facebook,会让你也想加入。而且没有比免费更好的服务。

不过,此刻优势可能正在消解:

Facebook 对自己的定义是“Make the World More Open and Connected”,让世界更开放和连接。连接的是什么?与每个人相关的信息。

换言之,它和”组织世界信息”的谷歌一样,提供给用户的免费服务也是经过组织处理的信息。

所以,当它遭遇信息传递的进阶版——区块链,你会发现,它的商业模式遭到了挑战:

先看内容生产端:

b. 区块链里的信息可追溯,实现了数字资产确权。

d. 把重新定义稀缺资源级别的技术从金融领域扩展到其他行业,想象空间无限变大。

最近 20 年,我们一同见证了传统媒体的衰落,不生产内容的 Facebook 成为了最大的媒体。

如今,美国 80% 的在线推荐流量来自谷歌和 Facebook。

这张有点文艺复兴风的照片,是 Reddit (全球流量第四)上的热门图片,人们对其来源知之甚少,谷歌也无法追溯。

所以即使用量大,内容生产者也没收益。

如果把“一枚 BTC”扩充成一篇原创文章。你的创作信息将被记录在不可修改的区块链里。

传播信息请见:Steemd.com

这将实现数字资产确权。比如在 Steemit,不仅生产有收益,传播的节点同样有收益。

作为大规模协作平台,Steemit 与 Facebook、知乎一样,早期也有大量高质量用户参与,其社区氛围肯定不会太糟。

更何况,它还提供前者所无法给予的经济激励。

唯一遗憾的是,Steemit 社区里的主流用户用英语,而我习惯中文输出。

听说霍炬、朱峰正做基于区块链的内容社区,期待他们的尝试。

再看消费端:

a. 保障信息的可靠性上,区块链用密码学而不是第三方提供的信用。你不必提供与交易“一枚 BTC”无关的信息,比如你的姓名性别居住地。

这是 Jacqueline 根据 Fred Wilson 的推特所作的人脉图表:

所以,剑桥分析公司只需接触了 27 万人,即可收集 5000 万人的数据。

暴露在 Facebook 这场丑闻里的事实是,我们每个人都是丰富的数据源,使用免费服务的代价是交出数据。

今天, 我们的数据信息被分散在几十、上百个不同的网站里,如:

  • 亚马逊、京东有你的信用卡信息和购买记录;
  • Facebook、微信认识你的朋友和家人。

它们被保存在中心公司的数据库,供广告主调用:

来源:LinkedIn B2B 营销解决方案

信息颗粒越细,理论上营销越精准,广告主单次付费越贵。虽然 LinkedIn 市值不如 Facebook,但单次付费绝对贵过 FB。

来源:LinkedIn B2B 营销解决方案

免费的商业模式肇始于哥伦比亚广播公司的广告。之后在掌握用户数据的社交网络里发挥了前所未有的威力。如今,Facebook 和谷歌占据了美国数字广告市场 70% 以上的份额,消耗了 99% 的增长。

问题是,在互联网发展的数十年里,我们越来越清晰数据的资产价值。如何收回收益?

用区块链。

在区块链里,你的身份与交易内容隔离。

来源:比特币白皮书

所以,这些数据信息:

  • 属于你自己;
  • 便携。

现在围绕区块链的一种尝试是卖数据。比如 Bitclave(不构成推荐建议),出售数据换取代币“奖励”,商户根据你的数据卖给你合适的产品。

虽然我对这种变现方式持观察态度,但这无疑是技术带来的改变:使用某项服务还能赚取收益,这显然比免费的商业模式好。

另外,我们更换社交平台的代价变小。过去,你不能从 Facebook 提取你的社交网络, 将之存入新平台。未来,你可以。

6. 案例:电商时机

e. 区块链与 TCP/IP 不可分割,它是某种信息传递的进阶版。

和上篇文章分析科技巨头诞生时机的逻辑一样。此刻,线下业务占比重的行业适合开发 DApp 吗?

以电商为例:

亚马逊、京东的确存储了大量消费数据。早在你购买之前,它们已开始不断推送商品信息,比如:

  • 邮件营销,
  • SEO营销,
  • “购买此商品的顾客也同时购买了……”。

这种 Lead generation(潜在客户开发/引导销售),让它们比沃尔玛好用。即使沃尔玛有同款性价比的商品,也无济于事,亚马逊肯定会让你先在 Amazon.com 上遇见它。

因为亚马逊也有强大的广告营销系统,所以说它们和 Facebook 的商业壁垒一样吗?这可能会犯下“麦当劳是地产公司”式错误。

电商不仅要推荐商品信息,还要完成线下交付。

我从来不认为影响区块链进入电商领域的会是 TPS(每秒交易量处理)。用 10 年前诞生的比特币(支持每秒 7 次交易),去对比亚马逊(每秒 600 笔交易),并不合适。区块链发展很快,为什么不用新的石墨烯技术(实测每秒 3300 笔交易)对比呢?

真正的挑战是交付体验,以及由此产生的平台忠诚度。亚马逊和京东都有庞大的仓储、物流,并基于此建立了会员体系。

对消费者而言,收回数据产生的价值能否高于亚马逊、京东提供的线下交付体验呢?

7. 技术核心三:共识机制

为前两项技术提供保障的是区块链的协作模式。

谁将数据写入区块并储存?谁为智能合约提供算力?

网络的其他节点。

如果你了解分布式数据库,可能觉得与区块链的存储方式相似。但其实两者完全不同。当增加节点时,前者的效率变高,后者效率走低。

中本聪使用 PoW (工作量证明)的初衷显然是去中心。所有节点都有参与资格;小区块可以保证多数节点有存储、写入能力;若只执行验证,数据增量低至年均 4.2 MB。

但实际难以去中心。即使忍受网络拥堵,坚持 1 MB 的小区块,当主链已产生 149 GB 数据量(截至 2017 年 12 月),你肯定不会牺牲 1/3 的硬盘去和拥有专业设备的矿场竞争。

要求每个节点直接生成共识,不仅牺牲可用性,而且事实上难以实现。

所以,当 EOS 想建立扩展性更强的应用开发平台时,他们选择了 DPoS(委任权益证明)。这种算法的重点是设计有效的投票机制,选取代理人,让代理人完成共识输出。

如果代理人不诚信,可以更换;如果贿选问题影响 EOS 的平台发展,其他节点可以用脚投票,比如切换至以太坊。

从 PoW 到 DPoS,表面看是算法更迭,其实浓缩了西方 17 和 18 世纪对社会契约论的思考:

  • 17 世纪的霍布斯说缔结社会契约前,“人对人是狼”。(不信任任何节点)
  • 18 世纪的卢梭认为,每个人把所有权利转让给所有人,不仅没失去权利,还会得到更多东西。(寻找更有效的协作方式)
  • 卢梭说,平等状态下缔结的社会契约将产生“公意”。“公意”不是所有人意见的总和,而是扣除众意里相异的个人利益后的相同部分,以公共利益为导向。(当你可自由跟换代理人、甚至离开平台,“公意”会以公共利益为导向)

所以,第三项技术的讨论与是否去中心无关,而是:如何在可用性与一致性之间做取舍。

9. 开放心态

今年春节,我爸和我说,他是文盲。

当时觉得夸张,毕竟是 80 年代的大学生。

后来却觉得有道理。现代社会绝大多数商业都建立在互联网上,如果你从拨号上网直接跳到移动手机,需要更新的观念的确多。

我越来越觉得,不论是工程师、产品运营、咨询、记者抑或其他岗位,我们都处在一个科技巨变的时代,商业范式不断被颠覆。

如果还用 100 年前福特发明的流水线思维对待工作,你可能会成为一个 2007 年的优秀塞班工程师。

区块链现在有不少待解决的问题,比如,扩容,进化共识机制。我前几天下载了某聊天 DApp 试用,也确实没有 Telegram 或微信好。

可回到 90 年代初,你会发现,第一个 HTML 网页如此简陋:

谁能料想,20 年后世界上最大的公司都诞生于此。

虽然区块链技术不复杂,但中本聪的厉害之处在于,他不仅有强动手能力,用编程将之完成,而且设计了一套激励机制,激发了无数人来参与。

没人能精准地预测未来,我们只知道两件事:世界必将不同,变化基于当下。

当区块链聚集了这么多的年轻人,持续不断的解决问题,每日进步一点点,未来可期。

摘自:http://www.woshipm.com/blockchain/993267.html

区块链主流开源技术体系介绍

区块链技术如今是非常火热,不仅让金融家和创投家趋之若鹜,如今已经在多个领域遍地播种。作为拥有锐利触角的创业家们,是否也想将区块链集成到你们现有的应用中去,而作为IT技术工程师的你,是否也是跃跃欲试,想基于区块链来练一下手,以免日后被新技术淘汰?不过,区块链涉及如密码学和P2P等多种技术,区块链的技术门派众多,新鲜概念层出不穷;而另一方面,区块链技术的发展在全球范围内还都尚处在早期阶段,各种技术方案和应用场景等还需要进一步地探索和完善,导致很多人想运用区块链,都找不到突破口,应该学习哪些知识和技术呢,应该用什么样的区块链呢?

就区块链技术而言,Elwin只能算是新司机,但我仍然尝试从开发工程师的角度,給区块链有兴趣的工程师分享一下区块链应用开发入门的经验。

我们大多数人的使用和开发区块链的目标来说,并不是要真的自己重新创建一套区块链,只是希望基于现有的区块链底层或技术框架去开发自己的应用。因此,对于类似加密算法、 P2P技术、共识算法等我们只需要有个基本了解就可以了,暂时不需要深入研究。而我们入门区块链应用开发的首要目标,是寻找一个相对成熟的区块链底层去做我们的应用开发的基础,其次,这个区块链底层需要配套强大易用的开发接口或开发框架,此外,这个区块链底层如果要考虑以后真正商用,还需要符合一些区块链的技术指标,如扩展性、燃料费用、交易频率等等。

就这两点目标,Elwin走遍天涯海角,最终挑选出认为符合要求的几个区块链底层平台給大家参考:

一、      比特币
最早的区块链开发便是基于比特币的区块链网络进行开发了,由于比特币是全球最广泛使用和真正意义的去中心化,就区块链应用来说,比特币就是世上最强大的锚,拥有最大的权威性。因此,围绕比特币的各种区块链技术非常多,这里不一一描述,只针对入门级别开发的介绍。

基于比特币的区块链网络开发介绍两种方式,一种相对比较简单,基于Blockchain.info的API进行开发。Blockchain.info是比特币的最流行的比特币钱包和区块查询网站,同时也提供的比特币及其区块相关API。 Blockchain.info 提供了多种主流语言的API库,包括了比特币的钱包、支付、区块、交易数据、市场数据等多方面的API。

​安装和使用Blockchain.info的API比较简单,首先你的机器需要有Node环境,在Blockchain.info的申请接口授权码,安装Blockchain Wallet API服务程序,就可以开始配置和测试Blockchain Wallet API服务程序了,要进一步开发,可以根据你的开发语言选择安装API的客户端支持库。

进一步的探索,可以采用Docker容器来快速安装和配置私有节点的比特币测试网络(bitcoin-testnet)作为开发试验环境,这样可以更深入了解、调试和使用比特币区块链网络。在Bitcoin的wiki网页上面,提供很多种语言都可以调用Bitcoin的RPC,大家选择适合自己的语言具体去试验,当然,Elwin仍然推荐你使用NodeJS。

具体流程是下载比特币测试网络的Docker镜像,运行Docker镜像并启动比特币测试网络,初始化和测试区块链数据,当然为了测试少不了要先挖矿储备一下。然后安装相关开发语言的RPC支持库后,就可以调试你的区块链程序了。

二、      以太坊
可以说除了比特币外,以太坊目前在区块链平台是最吸引眼球的。 以太坊是一个图灵完备的区块链一站式开发平台,采用多种编程语言实现协议,采用Go语言写的客户端作为默认客户端(即与以太坊网络交互的方法, 支持其他多种语言的客户端)。

基于以太坊平台之上的应用是智能合约,这是以太坊的核心。每个智能合约有一个唯一的以太币地址,当用户向合约的地址里发送一笔交易后(这个时候就要消耗燃料费用,也就是手续费用),该合约就被激活,然后根据交易中的额外信息,合约会运行自身的代码,最后返回一个结果。以太坊社区把基于智能合约的应用称为去中心化的应用程序(Decentralized App),相对于冷冰冰的智能合约代码,DApp拥有一个友好的界面和外加一些额外的东西,配合上图灵完备的语言,可以让用户基于合约搭建各种千变万化的DApp应用,实际上,在以太坊APP展区,已经有大大小小280个的DApp应用在展示(虽然只有一部分应用在真正运行)。

要写以太坊的智能合约有好几种语言可选,有类Javascript的Solidity,Python接近的Serpent,还有类Lisp的LLL,目前比较主流的是Solidity,推荐大家使用。当Solidity合约编译好并且发送到网络上之后,你可以通过以太坊的Mist客户端对智能合约进行测试和使用,也可以使用以太坊的web3.js JavaScript API来调用它,构建能与之交互的web应用。

由于以太坊的知名度,所以很多社区大牛创造更加便捷的DApp开发框架和工具,包括Truffle、Embark、Meteor、BlockApps.net APIs,使得你可以快速开发你的Dapp。我的另外一篇文章《微软的那些区块链云服务》有提及,Embark和BlockApps.net两个区块链工具已经給整合到微软Azure BAAS服务中了。这几个框架和工具中,Elwin更推荐Embark,使用起来非常简单。

通过以太坊,你既可以搭建基于属于自己私链,也可以和合作伙伴一起搭建联盟链,又或者直接将应用部署在以太坊的公共网络中,Elwin要吐槽的是,使用以太坊Gas费用越来越高了,对于互联网的应用,是自己搭建以太区块链,还是使用以太公共网络,真是两难境地(以太坊宣称,以太币Ether价格上升时,那以太坊燃料的价格应该按比例下降,但好像并不是这样阿)。

几个主要入门步骤給大家简单介绍一下,首先你可以安装以太坊钱包客户端Ethereum Wallet,体验一下以太坊的钱包和智能合约,当中可以选择公共网络或测试网络(如果你没有或不想花费以太币)。如果你已经很熟悉这些了,那好,直接进入正题,准备好Geth和Node的环境,同时安装以太坊Mist客户端(这个是为测试你的智能合约和Dapp准备),配置和启动Geth(Geth和eth相关参数文章,请参考官网文档),通常我会先用Geth搭建自己的私链来测试,Geth启动后,你可以先在Mist客户端中熟悉智能合约和Solidity语言(记得在Geth console先挖矿,否则没有以太币来测试),然后根据官网的几个例子来试炼你的第一个Dapp。上手后,可以尝试使用web3.js来调用,或直接安装Truffle或Embark来开发自己真正的Dapp应用。

三、      IBM HyperLedger
IBM HyperLedger 又叫 fabric,他的目标是打造成一个由全社会来共同维护的一个超级账本,fabric源于IBM,初衷为了服务于工业生产,IBM将44,000行代码开源,是了不起的贡献,让我们可以有机会如此近的去探究区别于比特币的区块链的原理。目前就Elwin所知,fabric还未进入真正的商用阶段,更多是试验和探索,不过相对于很多其他区块链,从技术底蘊他又是比较可信和靠谱的。

要基于HyperLedger进行区块链开发比想像中简单,有两种途径,一种是基于超能云(IBM中国研究院开发的超能云平台提供了各种云服务),他给区块链爱好者、开发者的区块链开发测试环境,通过超能云平台,用户能够免费、超快速创建基于Hyperledger Fabric的多节点区块链、并在自己的链上调试智能合约。Hyperledger Fabric的合约是基于Go语言的,上手比较简单。

​根据Elwin尝试,似乎超能云的区块链只适用于科研测试,要真正运营,还是建议自己搭建Fabric的区块链网络。安装和运行Hyperledge fabric的运行有几种方式,比较推荐是下载Fabric区块链网络的Docker镜像,运行Docker镜像并启动Fabric区块链网络,但相对于比特币和以太坊,Fabric网络的架构和安装相对复杂,除了区块链服务外,还需要另外安装运行validating peer和Certificate Authority (CA) 服务。搞定后要真正使用,还需要先用户注册和登记授权,然后才可以通过CLI 或REST API进行调试和使用。其中里面智能合约的编写,跟在超能云的区块链云服务的是一样的。此外,除了CLI或REST API,IBM还提供了gRPC API和 SDK的方式进行应用的开发。

四、      Lisk
LISK是新一代的区块链平台,允许JavaScript(又是Javascript技术,工程师们注意了)的开发和基于分布的分散的应用程序使用一个易于使用的,功能齐全的生态区块链系统。

Elwin觉得LISK相对于前面说的几个区块链底层,他的应用优势不仅仅在于他是第一个完全写在Javascript里的去中心化的应用解决方案,还在于他把每个应用加到LISK的单独侧链上。用过比特币和以太坊的朋友都知道,由于比特币和以太坊只有一条主链,所有功能和数据都加入这条主链导致区块快速膨胀,超大的区块体积,超长的同步时间,这个一个很痛苦的经历。Lisk的侧链模式给在处理高交易量下如何解决网络拥堵的问题提供了一种方法,用户只有用到相关的应用时才需要下载对应的侧链,大大减小了无效的同步数据,保持了整个Lisk网络的高效运行,而且,Lisk网络的速度随着时间的推移会继续加快,越显示他的特别优势。

其次,相对以太坊和Hyperledge fabric以智能合约为核心的区块链不同, Lisk区块链建立的目的并不是为了创建智能合约,而是使用Lisk APP SDK框架来开发不同的应用程序和功能。

Lisk APP的主要开发语言是NodeJS,Web开发者既能够开发应用程序的后端,也可以开发前端。通过使用Lisk APP SDK包,Web开发者可以轻松创建区块链应用。Lisk APP的开发也比较简单,跟你之前其他的NodeJS应用的开发是类似的。然而,跟比特币和以太坊的一样,Lisk的使用也是要消耗燃料费用的,还好,跟其他区块链底层网络一样,Lisk 也是有testnet模式的。

五、      布比网络
布比,是国内区块链技术特别是底层技术领先者之一,已拥有多项核心技术,并已经成熟的应用在了商业积分、游戏币、游戏道具、预付卡、电子券、保险卡单、证券化资产、互助保险等行业和领域。

布比区块链平台分为基础框架层(BubiChain)和应用适配层(Bubi Application Adaptors)。底层基础框架层提供区块链的基础服务,应用适配层提供上层应用所需的功能组件,为具体的应用系统开发提供接口和SDK,降低由于区块链自身复杂的逻辑所带来的应用开发的难度。

​对于一般开发的应用适配层,布比提供布萌区块链应用开发平台,该平台基于布比区块链技术,将上层应用所需要的功能组件进行封装,开发者想实现对应的功能,只需要注册成为布萌开发者即可获得接口使用权限。同时,平台提供开发者运维所需要的可视化管理工具。

就Elwin体验来说,布萌区块链的接入应该是几大区块链底层中最容易的,因为他不仅提供标准REST API,并提供JAVA等主流语言的SDK接入,同时,基于布萌区块链平台专注数字资产应用场景,跟其他大部分区块链接口纯技术和面向广泛应用的方式而言,布萌提供的接口更贴近业务场景的,更便于相关数字资产的应用接入到区块链。相对以太坊着重区块技术和智能合约的区块链不同,布比区块链的接入更务实和落地,你只需要关注你实际的业务,而不需要过多考虑区块链的技术细节。

区块链主流开源技术体系介绍

接上一篇应用开发入门介绍,Elwin这篇将会介绍主流的区块链开源技术体系,供大家开发自家区块链平台及应用参考。

一、     比特币体系
比特币(BitCoin)是最早也是全球最广泛使用和真正意义的去中心化区块链技术,因此他的开源技术体系非常值得参考。

比特币区块链的核心技术框架采用C++语言开发,共识算法采用POW算法,工作量(挖矿)证明获得记账权,容错50%,实现全网记账,公网性能TPS<7。

开源地址为: https://github.com/bitcoin/bitcoin

虽然说POW算法比较低效率和耗能,比特币区块链由于推出时间比较早又不够强大(如不支持智能合约),但不可否认的是,目前市场上相对成熟和稳定的区块链体系还是比特币。市面上群魔乱舞的山寨币,正是基于比特币的源代码照搬或小改动而创造的,在比特币区块链的体系基础上,还创造了几种区块链技术体系:

彩色币(染色币),彩色币本身就是比特币,是在历史上的创世交易里面被转移过的比特币。在技术上将比特币网络从其货币价值中抽离出来,它们具有一些特殊的属性,比如支持代理或聚集点,从而具有与比特币面值无关的价值。彩色币可以用作替代货币、商品证书、智能财产以及其他金融工具,如股票和债券等。

闪电网络,是为了解决比特币区块链的瓶颈处理能力而生的,他可以有效解决时延、容量扩展、最终性的问题,为比特币区块链提供了一个可扩展的微支付通道网络,使用闪电网络后,TPS最大可以扩展到300。交易双方若在区块链上预先设有支付通道,就可以多次、高频、双向地通过轧差方式实现瞬间确认的微支付;双方若无直接的点对点支付通道,只要网络中存在一条连通双方的、由多个支付通道构成的支付路径,闪电网络也可以利用这条支付路径实现资金在双方之间的可靠转移。

比特币侧链

侧链是以锚定比特币为基础的新型区块链,就像美金锚定到金条一样。比特币的在区块链相当在货币体系的黄金地位,因为他是最去中心化、最多分布节点、最公平区块链。侧链是以融合的方式实现加密货币金融生态的目标,而不是像其它加密货币一样排斥现有的系统。利用侧链,我们可以轻松的建立各种智能化的金融合约,股票、期货、衍生品等等。你可以有成千上万个锚定到比特币上的侧链,特性和目的各不相同,所有这些侧链依赖于比特币主区块链保障的弹性和稀缺性。比较著名的比特币侧链是Rootstock和BlockStream推出的元素链。

Rootstock是一个基于比特币侧链的开源智能合约平台,他使得比特币拥有了智能合约,基于Rootstock的智能合约能够运行无数应用,为核心比特币网络增加价值和功能。Rootstock使用一种比特币双向挂钩技术,这种双向挂钩以一种固定的转换率输送或输出Rootstock上的比特币,Rootstock双向挂钩是一种混合驱链和侧链的技术。更值得关注的是,Rootstock向后兼容以太坊,实现了以太坊虚拟机的一个改进版本,所以以太坊发布的DApps程序能够轻松地在Rootstock上使用,实现比特币级别的安全性和以太坊大量Dapps的复用性,更快的执行性并和比特币发生更强的相互作用。使用Rootstock可以将性能扩展到TPS为300。

元素链(Elements)是Blockstream的开源侧链项目,同样使用比特币双向挂钩技术,除了智能合约外,他还给比特币快速带来许多创新技术,包括私密交易、证据分离、相对锁定时间、新操作码、签名覆盖金额等等特性。核心技术框架采用C++语言开发,开源地址为: https://github.com/ElementsProject/elements

二、     以太坊ETH
刚结束的以太坊全球开发者大会DEVCON2,吸引了无数大牛到上海,可以看到,以太坊生态系统正在高速地成长着,正朝着成为“世界计算机”的目标前进。无论是the DAO众筹到攻击,还是ETH与ETC 分道扬镳,或者是各种以太坊生态的开发框架和应用,以太坊目前在区块链平台是最吸引眼球的。

以太坊是一个图灵完备的区块链一站式开发平台,采用多种编程语言实现协议,采用GO语言写的客户端作为默认客户端(即与以太坊网络交互的方法, 支持其他多种语言的客户端)。基于以太坊平台之上的应用是智能合约,这是以太坊的核心。智能合约配合友好的界面和外加一些额外的小支持,可以让用户基于合约搭建各种千变万化的DApp应用,这样使得开发人员开发区块链应用的门槛大大降低。

以太坊ETH的开源地址: https://github.com/ethereum/ 。以太坊的整个技术生态系统比较强大,同时迭代周期比较快,所以有比较强的生命力,但事物都有两面,对于依赖于以太坊特别是以太坊公网的商业应用来说,频繁的迭代升级和处于风口浪尖(被攻击),使得基于以太坊的商业应用,有时候不得不打足精神去跟以太坊一起升级维护和补丁。

目前以太坊正在正式运行1.0版本,采用的是POW挖矿的共识算法,目前公网的TPS是25笔,在开发中的1.5版本,将采用类POS的Casper算法,以使区块链的确认速度相对于POW的线性效率,达到指数级。采用Casper后将会更好的确认机制,以及大幅降低能量消耗。在规划的 2.0版本目标,TPS有望可以达到2000TPS。

以太坊的进一步开发介绍你可以参考我另外一篇文章《区块链应用开发入门》。

三、     IBM HyperLedger fabric
IBMHyperLedger,又叫 fabric,是一个带有可插入各种功能模块架构的区块链实施方案,他的目标是打造成一个由全社会来共同维护的一个超级账本。Elwin个人感觉fabric分层设计比较合理,模块化程度非常不错,虽然目前还是在完善阶段,并没有真正商用(最近IBM携手中国银联打造区块链为基础的忠诚积分交易系统,但还是属于探索试样项目),但以IBM的多年技术底蕴,fabric应该是大企业构建区块链底层的选择之一。

fabric架构核心逻辑有三条:Membership、Blockchain和Chaincode。MembershipServices这项服务用来管理节点身份、隐私、保密性、可审计性。Blockchain services使用建立在HTTP/2上的P2P协议来管理分布式账本,提供最有效的哈希算法来维护区块链世界状态的副本。采取可插拔的方式来根据具体需求来设置共识协议,比如PBFT,Raft,PoW和PoS等等,IBM首选PBFT算法。Chaincode services 会提供一种安全且轻量级的沙盒运行模式,来在VP节点上执行chaincode逻辑,类似以太坊的EVM虚拟机及其他上面运行的智能合约。

开源地址: https://github.com/hyperledger/fabric 。Fabric的主要框架核心开发语言是GO语言,系统目标是15个验证节点下最理想情况下可以有100K TPS的性能,更适合于联盟链。

四、     比特股BitShare
比特股(BitShares)是区块链历史上里程碑式的产品之一,截至目前仍然是完整度最高、功能最丰富、性能最强大的区块链产品之一。比特股是可以看作是一个公司、货币甚至是一个社区。它提供的BitUSD等锚定资产是虚拟币历史上的一个最重要变革之一,能够极大消除虚拟货币被人诟病的波动性大的问题。

比特币低效率高能耗的POW算法,使得比特股及其DPos共识算法应运而生。有别于比特币特定的共识机制,DPos有一个内置的实时股权人投票系统,就像系统随时都在召开一个永不散场的股东大会,所有股东都在这里投票决定公司决策。与比特币相比,比特股系统的投票权牢牢掌握在股东手里,而不是雇员。比特股系统的去中心化程度紧紧掌握在比特股持有者们的手中,他们决定了出块受托人的个数。同时,作恶的受托人不会得到任何好处,并且很快就会被投票出局。此外,比特股内置了强大的账户权限设定、灵活的多重签名方式、白名单等特性,足以满足企业级的功能定制需求。

比特股的1.0开源地址是: https://github.com/bytemaster/bitshares ,2.0开源库在: http://github.com/bitshares 。他的核心技术框架采用C++语言开发,既适用于公有链,也适合于联盟链,只需要少量节点进行记账,TPS>500,容错50%,在比特股2.0中如果在最优的网络和硬件情况下可以达到最高100K的TPS。

五、     公证通Factom
公证通(Factom)利用比特币的区块链技术来革新商业社会和政府部门的数据管理和数据记录方式,也可以被理解为是一个不可撤销的发布系统,系统中的数据一经发布,便不可撤销,提供了一份准确、可验证、且无法篡改的审计跟踪记录。利用区块链技术帮助各种各样应用程序的开发,包括审计系统,医疗信息记录,供应链管理,投票系统,财产契据,法律应用,金融系统等。

建立在Factom基础之上的应用程序寻求能够直接利用区块链实现追踪资产和实现合约,而不用将交易记录写入区块链,Factom在自己的架构中记录条目。跟以太坊类似,Factom系统会创造一个叫Factoids的电子币。持有Factoids意味着有权使用Factom系统。只要把Factoids转化成输入积分便有权把数据写入Factom系统中。同时运行着Factom的联邦服务器也能收获Factoids作为维护系统的回报。Factom虽然同样基于比特币网络,但却并不是之前提到侧链或染色币的技术架构,Factom只将目录区块的哈希值锚定到比特币区块链。Factom很好地解决了比特币三个核心的约束和问题,速度、成本和区块链膨胀。

Factom中的政策和奖励机制与POS机制有相似之处。与其不同之处在于,Factom中只有一小部分的用户权益能够被认可。只有已经提交到系统的权益有投票权,而可转移的Factoid权益没有投票权,避免了POS机制的“股份磨损”和“没有人进行POS”问题。

公证通的开源地址是: https://github.com/FactomProject/FactomCode 。他的核心技术框架采用GO语言开发,TPS是27笔左右(待考究)。

最新情况,Factom将不会只依赖于比特币区块链,他将会同样会通过整合以太坊区块链,以来确保存放的数据时时刻刻都是安全的。

六、     瑞波Ripple
瑞波(Ripple)是世界上第一个开放的支付网络,是基于区块连的点到点全球支付网络。通过这个支付网络,使你轻松、廉价并安全的把你的金钱转账到互联网上的任何一个人,无论他在世界的哪个地方,他可以转账任意一种货币,包括美元、欧元、人民币、日元或者比特币,简便易行快捷,交易确认在几秒以内完成,交易费用几乎是零,没有所谓的跨行异地以及跨国支付费用。

Ripple有两个重要概念,其一是推出Ripple币瑞波币——XRP,它作为Ripple网络的基础货币,就像比特币一样可以整个网络中流通,主要是燃料Gas的作用,每产生一笔交易就会消耗一些 XRP;其二是引入网关(Gateway)系统,它类似于货币兑换机构,允许人们把法定货币注入、抽离Ripple网络,并可充当借、贷双方的桥梁。

Ripple引入了一个共识机制RPCA,通过特殊节点的投票,在很短的时间内就能够对交易进行验证和确认。Ripple客户端不需要下载区块链,它在普通节点上舍弃掉已经验证过的总帐本链,只保留最近的已验证总帐本和一个指向历史总帐本的链接,因而同步和下载总帐本的工作量很小。

Ripple的作用并不仅仅只负责清算货币兑换,它可以是各种虚拟货币、数字资产或任意一种有价值的东西。

Ripple的开源地址是: https://github.com/ripple/rippled ,他的核心技术框架采用C++语言开发,TPS<1000。

七、     未来币NXT
未来币(Nxt、Nextcoin)是第二代去中心化虚拟货币,它使用全新的代码编写,不是比特币的山寨币。它第一个采用100%的股权证明POS算法,有资产交易、任意消息、去中心化域名、帐户租赁等多种功能,部分实现了透明锻造功能。

Nxt是且是第一个100%的股权证明机制的电子货币,Nxt不再通过消耗大量的资源“挖矿”产生新货币,而是通过现有账户的余额去“锻造”区块,并给与成功“锻造”区块的账户交易费用奖励。

Nxt具有一个非常灵活的特性,称为“透明锻造”。这一机制使得每一个用户客户端可以自动决定哪个服务器节点能够产生下一个区块。这使得客户端可以直接将交易发送到这个节点,从而使得交易的时间达到最短。实时和高优先级的交易可以通过支付额外的费用来被优先处理。

Nxt区块链2.0已经在讨论和计划实施中了,其核心思路就是要通过主链(Main Chain)和子链(Child Chain)的这种架构来增加Nxt区块链的可扩展性和可删减性,从而解决长期存在的区块链膨胀等问题;

Nxt的开源地址是: https://bitbucket.org/JeanLucPicard/nxt/overview ,他的核心技术框架采用JAVA语言开发,TPS<1000。

八、其他
此外,还有几个区块链技术体系也介绍一下:

英特尔的锯齿湖(Sawtooth Lake),目前是用于建造、部署和运行分布式账本的高度模块化平台,重点领域在数字资产,在锯齿湖的数据模型和交易事务语言中,是由称为“transaction family”的体系来实现的, 給用户可以有开箱即用的功能齐全的市场数字资产管理体系。采用PoET和Quorum Voting两种共识算法,框架核心开发语言 Python ,开源地址为 https://github.com/intelledger 。

布比区块链,目前采用的是对联盟链内定向开源,共识算法采用自研发的Pool验证池,可以集成Byzantine Paxos、Byzantine、Raft等商用共识算法,实现免Gas费用的秒级共识验证,框架核心开发语言是C++,应用场景比较广泛。

小蚁区块链,开源地址为 https://github.com/antshares/antshares ,采用改进的拜占庭容错算法-dBFT共识算法,支持智能合约,目前重点领域在数字资产应用,框架核心开发语言C#。

最后,汇总一下几大主流开源技术的比较。

*附注[共识算法解释]:
共识机制是区块链技术的关键点。共识机制的核心是在分布式网络中,利用一种规则(算法)来保证全网对于Block的创建是一致的,下面是主要的共识算法。
1、Pow工作量证明,就是大家熟悉的挖矿,通过与或运算,计算出一个满足规则的随机数,即获得本次记账权,发出本轮需要记录的数据,全网其它节点验证后一起存储;
2、Pos权益证明,Pow的一种升级共识机制;根据每个节点所占代币的比例和时间;等比例的降低挖矿难度,从而加快找随机数的速度。

3、DPos股份授权证明机制,类似于董事会投票,持币者投出一定数量的节点,代理他们进行验证和记账。
4、Pool验证池,由布比构建,基于传统的分布式一致性技术,加上数据验证机制;是目前行业链大范围在使用的共识机制
5、PoET(Proof ofElapsed Time),也就是‘消逝时间量证明’,它是由英特尔构建在可信执行环境的一种彩票协议。
6、QuorumVoting,属于Quorum拜占庭协议,仲裁投票算法,它采用了瑞波和恒星的共识协议,用来解决需立即交易定局的需求。”
7、Casper,以太坊社区提出的正在研发中的类POS共识协议。Casper的基本思路是,任何人抵押足够多的以太币到系统中就可以成为矿工参与到挖矿过程。共识算法要求所有的矿工诚实工作,如果一个矿工有意破坏,不遵守协议,系统就会对矿工做出惩罚:没收之前抵押的以太币。有人把Casper这样的挖矿机制称为“虚拟挖矿”。
8、PBFT(PracticalByzantine Fault Tolerance)算法,拜占庭容错算法,属于状态机拜占庭协议,IBM HyperLedger fabric实现和推荐的共识算法,采取一个节点一票的方案确定记账结果,少数服从多数投票,性能较好,主要用于联盟链。

来源:CSDN
原文:https://blog.csdn.net/kwame211/article/details/79386549
版权声明:本文为博主原创文章,转载请附上博文链接!