以太坊(Ethereum) 教程

以太坊(Ethereum)是一个可编程的虚拟币,它是一个基于公共区块链的分布式计算平台,可用于构建基于区块链的分布式应用。

在以太坊出现之前,各种区块链应用的功能非常有限,例如,比特币和其他加密货币都只是纯粹的数字货币。

以太坊创始人Vitalik Buterin将以太坊设想为开发人员在区块链上编写程序的平台。为了实现此目标,Vitalik Buterin基于区块链技术重新设计了以太坊,除了作为数字货币,以太坊还提供了对数字货币进行编程的能力,即智能合约,开发人员可以利用此能力,开发基于区块链的分布式应用。

世界上任何人都可以在以太坊上开发运行分布式应用(DAPP),这正是以太坊团队把以太坊称为 世界计算机(World Computer) 的原因。


1. 以太坊与比特币对比

以太坊/Ethereum被称为区块链2.0,比特币可以被认为是一种数字货币,而以太坊除了是数字货币,还有一大创新:提供了对数字货币进行编程的能力,即智能合约。

比特币和以太坊的比较:

项目 比特币 以太坊/Ethereum
Concept 数字货币 区块链虚拟机
创始人 中本聪(神秘人) Vitalik Buterin 及其团队
脚本语言 图灵不完备 图灵完备
发布日期 2009年1月 2015年7月
发行方法 挖矿 初始代币发行/ICO
区块确认时间 ~10 分钟 ~12-15 秒
目标 普通货币的替代品 点对点的智能合约

 

2. 以太坊的设计原则

1) 简洁原则

以太坊协议将尽可能简单,即便以某些数据存储和时间上的低效为代价。一个普通的程序员也能够完美地去实现完整的开发说明。这将最终有助于降低任何特殊个人或精英团体可能对协议的影响并且推进以太坊作为对所有人开放的协议的应用前景。添加复杂性的优化将不会被接受,除非它们提供了非常根本性的益处。

2) 通用原则

没有“特性”是以太坊设计哲学中的一个根本性部分。取而代之的是,以太坊提供了一个内部的图灵完备的脚本语言以供用户来构建任何可以精确定义的智能合约或交易类型。想建立一个全规模的守护程序(Daemon)或天网(Skynet),你可能需要几千个联锁合约并且确定慷慨地喂养它们,一切皆有可能。

3) 模块化原则

以太坊的不同部分应被设计为尽可能模块化的和可分的。开发过程中,应该能够容易地让在协议某处做一个小改动的同时应用层却可以不加改动地继续正常运行。以太坊开发应该最大程度地做好这些事情以助益于整个加密货币生态系统,而不仅是自身。

4) 无歧视原则

协议不应主动地试图限制或阻碍特定的类目或用法,协议中的所有监管机制都应被设计为直接监管危害,不应试图反对特定的不受欢迎的应用。人们甚至可以在以太坊之上运行一个无限循环脚本,只要他愿意为其支付按计算步骤计算的交易费用。

 

3. 以太坊的功能应用

以太坊是一个平台,它上面提供各种模块让用户来搭建应用,如果将搭建应用比作造房子,那么以太坊就提供了墙面、屋顶、地板等模块,用户只需像搭积木一样把房子搭起来,因此在以太坊上建立应用的成本和速度都大大改善。具体来说,以太坊通过一套图灵完备的脚本语言(Ethereum Virtual Machinecode,简称EVM语言)来建立应用,它类似于汇编语言。我们知道,直接用汇编语言编程是非常痛苦的,但以太坊里的编程并不需要直接使用EVM语言,而是类似C语言、Python、Lisp等高级语言,再通过编译器转成EVM语言。

上面所说的平台之上的应用,其实就是合约,这是以太坊的核心。合约是一个活在以太坊系统里的自动代理人,他有一个自己的以太币地址,当用户向合约的地址里发送一笔交易后,该合约就被激活,然后根据交易中的额外信息,合约会运行自身的代码,最后返回一个结果,这个结果可能是从合约的地址发出另外一笔交易。需要指出的是,以太坊中的交易,不单只是发送以太币而已,它还可以嵌入相当多的额外信息。如果一笔交易是发送给合约的,那么这些信息就非常重要,因为合约将根据这些信息来完成自身的业务逻辑。

合约所能提供的业务,几乎是无穷无尽的,它的边界就是你的想象力,因为图灵完备的语言提供了完整的自由度,让用户搭建各种应用。白皮书举了几个例子,如储蓄账户、用户自定义的子货币等。

 

4. 预备知识

本教程介绍以太坊的原理及实际应用。

  • 以太坊开发人员需要了解区块链原理
  • 以太坊(Ethereum) 智能合约:智能合约(Smart contract )是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于1995年由 Nick Szabo 首次提出。智能合约的目的是提供优于传统合约的安全方法,并减少与合约相关的其他交易成本。