以太坊与比特币的异同

与比特币类似,以太坊是一个去中心化的区块链平台。在这个区块链平台上有众多节点参与,它们组成了一个P2P网络,这些节点彼此平等,没有任何一个节点有特殊的权限,也不存在由一个或多个节点进行协调或调度。以太坊网络中的各个节点都可以发出“交易”,也可以进行“记账”,即记录并执行网络上发出的“交易”。这些交易会被节点打包成一个个“区块”,其中每个区块包含上一个区块的索引,因此这些区块依次相连接,形成一条区块链。如上文所述,这些节点之间通过共识机制以达成数据一致性,从而形成一个整体。早期版本的以太坊像比特币一样使用“工作量证明”(Proof of Work,PoW)这种共识机制来保证一致性。

以太坊与比特币不同的地方有很多,从性能表现以及特性上来看,主要有以下几点区别。

  • 以太坊有更快的“出块”速度以及更先进的奖励机制。目前,比特币的出块时间平均为10min,而以太坊的出块间隔为12s,这意味着以太坊具有更大的系统吞吐量和更小的交易确认间隔。

  • 以太坊支持智能合约,用户可以自己定义数字资产和流通的逻辑,通过以太坊虚拟机几乎可以执行任何计算,而比特币只能支持比特币的转账。这一点意味着以太坊可以作为更通用的区块链平台,支持各种去中心化应用(DApp)。

  • 另外,以太坊的社区更加活跃。显然,不像比特币一样满足于虚拟货币,以太坊积极地探索新技术,不断地对系统升级更新。而且其相关技术生态更加完善,在Ethereum官方的GitHub上有147个项目,其中不仅有各种不同语言版本的客户端,还有智能合约编译器、集成开发环境,以及未来将要采用的“股权证明”(Proof of Stake,PoS)协议和各种技术文档。

    以太坊的特色技术

    如上文所述,以太坊是一个可编程的区块链。形象一点地理解,在以太坊区块链上发送的交易不仅仅可以是转账金额,还可以是调用一段代码,而该代码可以由用户自定义。因此可以想象,在以太坊区块链上处理的交易逻辑不再是单一的转账,而可能是任意的函数调用;记录在区块链账本里的不仅仅是账户余额,还有函数调用后变量的新状态。因为代码可以任意定义,所以应用就都可以在区块链上运行了。

    支持用户在以太坊网络中创建并调用一些复杂的逻辑,这是以太坊区别于比特币区块链技术最大的挑战。以太坊作为一个可编程区块链的核心是以太坊虚拟机(EVM)。每个以太坊节点都运行着EVM。EVM是一个图灵完备的虚拟机,这意味着通过它可以实现各种复杂的逻辑。用户在以太坊网络中发布或者调用的“智能合约”就是运行在EVM上的。智能合约和EVM将在第4章介绍。

    所谓智能合约其实就是一段EVM可执行的代码,熟悉面向对象编程的读者可以将一个智能合约实例理解成一个对象。简单来说,用户编写一个智能合约类似于编写一个类,其可以在这个类里定义各种变量以及函数。当用户将这个智能合约发布到以太坊网络中时,相当于给这个类生成一个对象,合约发布之后用户会得到一个合约地址,相当于合约对象的指针。当网络中的用户调用这个智能合约时,可以直接给这个合约地址发送“交易”,并声明本次调用的函数名称和参数,使得智能合约执行对应的逻辑。无论发布还是调用智能合约,智能合约的信息都被附在“交易”中,以交易的形式发布到网络中。因此以太坊网络中的节点接收到这些交易后,其中的EVM会执行对应的合约代码,最后各个节点通过PoW或PoS等达成共识,合约的内容和状态也就实现了全网一致。

    这里给出一个简单的例子。下面这段代码就是一个智能合约SimpleStorage,里面只有一个变量storedData,以及set和get方法,有编程基础的读者可以很轻松地理解。

    contract SimpleStorage {

        string storedData;

        function set(string s) {

            storedData = http://www.gunmi.cn/v/s;

        }

        function get() constant returns (string) {

            return storedData;

        }

    }

    图1-4展示了在以太坊网络中创建智能合约的过程。当Bob将一个包含智能合约信息(如上例代码)的交易发送到以太坊网络中后,节点的EVM执行这个交易并生成对应的合约实例,图中的“0x6f8ae93..”代表了这个合约的地址。节点间通过共识机制达成一致后,这个合约就正式生效了,之后用户就可以调用SimpleStorage合约了。

    以太坊与比特币的异同

    图1-5展示了在以太坊上调用智能合约的过程。Bob同样以交易的形式在“To”字段填上SimpleStorage合约的地址,在“Data”字段填上调用的方法(set)和参数(“Hello”),就可以调用智能合约SimpleStorage,将其中的storedData设为“Hello”。节点收到这条交易后,通过EVM执行对应的操作,并通过共识机制实现以太坊网络上合约状态的改变。之后,当Alice查看这个合约的变量时,就会发现这个合约中storedData变量的值变成了“Hello”。由于查看的过程不涉及状态的修改,而且以太坊上数据是分布式的,网络中的每个节点都可以在本地保存一份完整的数据,因此Alice可以不通过交易的形式查看到这个变量的值。

    以太坊与比特币的异同

    通过这个例子,可以理解如何在以太坊区块链上创建和运行一段代码以及代码变量的存储。在实际应用中,合作的几家机构可以用这段代码定义商业运作的规则,区块链作为执行规则的平台不为某个个体的意志所左右,公开公正地执行和记录代码的逻辑和数据,减少了机构合作中的摩擦和成本。

    ——本文摘自:《以太坊技术详解与实战》

    推荐阅读

    以太坊与比特币的异同

    《以太坊技术详解与实战》

    ISBN:978-7-111-59511-3

    作 者:闫莺 郑凯 郭众鑫 编著

    定 价:59.00元

    出版时间:2018/04

    内容简介:

    以太坊创始人、首席科学家Vitalik Buterin倾力推荐,工业界与学术界区块链专家联合撰写,权威性和实用性毋庸置疑。

    深入剖析以太坊架构、核心部件、智能合约编写与开发案例等关键技术,并涵盖以太坊数据分析、性能优化、隐私与数据安全等前沿实践与进展。

    点击购买