根据《以太坊白皮书》(A Next-Generation Smart Contract and Decentralized Application Platform,原文参见:https://github.com/ethereum/wiki/wiki/White-Paper)的描述,我们可以对以太坊进行如下定义:
以太坊的意图是为去中心化应用程序构建一个可替代的协议,这是一种在大规模使用的去中心化应用程序和为特定目的设计的简单的低频应用间进行了必要权衡的协议,同时考虑了应用间的高效交互能力。以太坊通过一个抽象的基础设施层来实现这个目标:一个内置了图灵完备编程语言的区块链系统。在这个系统中,任何人都基于他们自己的要求编写智能合约和去中心化应用,他们可以自定义权限控制、交易数据格式以及状态转换函数。在这个平台上,我们可以构建基于密码学原理构成的自主对象,也就是所谓的智能合约,它在比特币脚本系统能实现的功能之上增加了图灵完备、价值感知、区块链感知和状态保存等特性。
用最简单的一句话来说:以太坊就是一个基于区块链的智能合约平台。
这里有两个关键的基本概念:区块链和智能合约。
区块链(blockchain)的概念出自比特币协议,本质上是一个基于P2P网络(点对点网络)的分布式账本系统,交易数据被以所谓的“区块(block)”进行打包,在全网节点中被顺序执行并通过工作量证明(proof of work)共识算法进行数据同步和验证,是一种已经被证明安全可靠的分布式底层技术。它具有去中心化、去信任(无须信任)、开放自治、极难篡改、极难伪造以及其他一些技术特性。关于区块链,在很多书籍、资料中都有详细介绍,这里不再过多展开。
而所谓智能合约(smart contract)其实并不是一个非常新的概念。早在1994年,美国计算机科学家尼克•萨博(Nick Szabo)就在他的论文中正式提出了智能合约的概念,并且他自己也尝试做了实验性的软件系统,但并没有得到工程上的验证,或者说当时还没有发现可以真正支撑相关特性的技术方案。直到2013年年底《以太坊白皮书》的出现,才使这个概念重新进入大众的视野,而以太坊这四年来总体稳定地运行,也从工程上证明了智能合约是可以实现的。
那什么是智能合约呢?
尼克•萨博曾举过一个现实世界中的例子来说明智能合约,他用的是ATM或者自动售货机。很容易理解,比如ATM,我们要从自己的账户中取若干现金,那我们需要告诉ATM我们的账号(无论以何种方式),然后输入我们要提取的金额,ATM则会根据我们账户余额的情况判断是否能给出足额的现金。对于自动售货机,也是类似的。售货机内的商品肯定是明码标价的,我们选想要的商品,然后付钱,机器会把商品“吐出”,并找零;商品不足或者支付金额不足时会给出相应的反馈。而与此类似的功能,目前都是可以在以太坊上通过智能合约实现的。比如我可以将合约当作我自己的一个现金钱包,有需要的时候从合约中提取相应的金额,余额不足时合约也会产生错误;又比如,我们可以通过合约来进行虚拟资产的售卖,就像2017年的ICO(Initial Coin Offering)风潮那样,通过智能合约来进行token的发行、售卖等操作,整个过程都可以是公开透明且自动完成的。这就是智能合约。
在以太坊中,就是通过把基于区块链的交易,拿到一个具有自己的指令集、自己的存储机制(临时存储和永久存储)的可编程虚拟机中来执行,来实现智能合约的。这个虚拟机就是以太坊协议的最大创新,就是所谓的“以太坊虚拟机(Ethereum Virtual Machine,EVM)”。所以,以太坊也可以看作是“区块链+EVM”。EVM就是前面以太坊的技术定义中提到的支持图灵完备编程语言的基础设施,我们可以通过特定的高级语言,比如Solidity,来自定义地编写智能合约。在本书的第7章中,我们将完整、详细地讲解以太坊协议(EVM)的原理和实现细节,这里就不再做过多展开介绍了。
最后需要解释的就是上文中以太坊的技术定义里多次提到的去中性化应用程序。DApp可以简单地理解为以智能合约而不是以传统的、由个别组织和公司控制的以中心化的服务器(server)为后端的应用程序,DApp的叫法是为了与那些基于客户端-服务器(client-server)架构或者浏览器-服务器(browser-server)架构的所谓中心化应用程序相区别。目前来看,根据业务需求,仅将部分应该由智能合约来处理的逻辑放到类似于以太坊这样的去中心化智能合约平台中,而其他无须做这种改动的业务仍然基于传统的服务器架构实现的所谓混合架构(hybird mode)的DApp具有更大的现实性,也更具有工程可行性。在本书中也有关于DApp开发的具体实例供读者参考,在此也不再过多展开了。
如今,以太坊已经成为程序员最为青睐的智能合约开发平台,这离不开社区为以太坊贡献的优秀的开源DApp开发工具和框架,例如:目前最受欢迎的以太坊开发框架Truffle,可以在本地提供完整的合约编译、部署、测试功能;以太坊的JavaScript API—Web3.js,能够帮助开发者使用HTTP或者IPC连接轻而易举地与本地或远程的以太坊节点交互;在币市上,排名前100的币中有94%都是按照以太坊的“ERC-20 tokens”标准进行的ICO。
接下来使用一个简单的众筹示例来展示以太坊是如何运行的,以及以太坊在这个示例中解决了什么问题。目前世界上最大的众筹公司Kickstarter,在每次众筹过程中,投资者都会将资金交给Kickstarter管理。如果众筹金额达到了创业团队设置的目标,那么Kickstarter应该将资金转交给团队,否则将投资者的资金按原路返还。然而,在这个过程中,无论是投资者还是创业团队,都完全将信任建立在Kickstarter上。目前在以太坊上已经有很多类似的应用,如图1-1所示,创业团队可以将众筹合约部署在以太坊上,通过EVM由以太坊上的所有节点执行。投资者向合约发送以太币(ether),合约将记录资金的变化,同时也会记录发送者的地址,以便将资金退回。
当众筹期限截止时,如图1-2所示,如果实现了众筹目标,合约将自动把资金发送到创业团队的账户,否则,合约将自动把资金退还到投资者的账户。合约的代码以及运行过程中的每一次状态改变都是公开透明的,没有任何机构或个人能够改变合约的执行结果。
▶ 图1-1 以太坊运行示例
▶ 图1-2 众筹期限截止时资金的转移
推荐阅读
长按二维码
了解及购买
《深入以太坊智能合约开发》
作者:杨镇 姜信宝 朱智胜 盖方宇
书籍简介:
1. HiBlock社区官方出品,4位区块链技术专家联合撰写;
2. 从开发工具与生态、编程语言(Solidity)、编写方法、优秀实践、以太坊虚拟机、合约安全、软件工程、DApp开发等维度全景呈现以太坊智能合约开发。
你与世界
只差一个
公众号