以太坊简介§
2013 年底,19 岁的 Vitalik Buterin(以下简称 V 神) 发布了以太坊白皮书,以太坊就此诞生。
白皮书的副标题是 "A Next-Generation Smart Contract and Decentralized Application Platform"(下一代智能合约智能合约和去中心化应用平台),可以看出以太坊和比特币的定位不一样,比特币是一个点对点的电子现金系统,以太坊是想打造一个去中心化的应用平台。
V 神简介§
V 神是个 94 年出生在俄罗斯的“小朋友”,父母都是计算机相关专业背景,V 神从小就沉迷编程,6 岁的时候举家搬迁到了加拿大。少年时候的 V 神是编程天才,数学天才,直到他迷上了网络游戏 《魔兽世界》。
如同一般的网瘾少年,V 神沉迷游戏好几年,直到魔兽做版本变更,把 V 神最喜欢的英雄“术士”的技能“生命虹吸”移除了,V 神多次找暴雪工程师投诉未果,从此放弃了心爱的网游,投入到比特币的研究之中。
研究比特币后,V 神深深陷入去中心化的世界,无法自拔,最终也走上了很多编程大佬会选择的路:辍学。
比特币有一些“局限”,V 神便开始自研一套新的去中心化平台(也就是后来的以太坊)的工作。
比特币的局限§
比特币作为一个去中心化电子现金系统已经足够完美,这样一个 Bug Bounty(发现并利用漏洞能得到奖励)的系统在不更新(没有大更新)的情况下运行了十几年没有出现问题在传统计算机领域已经算得上是奇迹了。
但还是有一些局限
- 支付速度太慢
比特币每个区块产生速度大概是十分钟,为了安全起见一般要等六个区块确认才认为交易生效,这需要大概一小时。这个问题可以用闪电网络解决,这套机制在使用比特币作为法币的萨尔瓦多运行得非常良好。
- 脚本语言不完善
比特币的定位是一个现金系统,所以只设计了一个简单的非图灵完备可编程平台,没法基于它构建复杂的去中心化应用。
- PoW 太耗电
虽然耗电,但确实相对公平,共识也更加稳固,这个见仁见智了。
以下是 V 神在白皮书里总结的比特币脚本的局限:
- 缺乏图灵完备
尽管比特币脚本语言可以支持多种计算,但并不能支持循环语句。不支持循环语句的目的是为了避免交易确认时出现死循环。理论上来说可以用多重 if 语句来代替,但效率极低,编码难度也非常高。例如实现一个椭圆曲线签名算法需要 256 次重复的乘法,且每次都需要单独编码。
- Value-blindness
UTXO 脚本无法对可提取的额度进行精细的控制。例如预言机合约(Oracle Contract)的一个强大应用是对冲合约。 A 和 B 投入价值 1000 美金的 BTC,30 天后脚本将价值 1000 美元的 BTC 发送给 A,其余的发送给 B。这将需要一个预言机来确定 1 BTC 价值多少美元。但即便如此,与现在可用的完全中心化的解决方案相比,在信任和基础设施要求方面也有了巨大的改进。然而 UTXO 要么全有要么全无(all-or-nothing),所以实现这一点的唯一方法是通过拥有许多不同面额的 UTXO(例如有一个 2^k 的 UTXO, k 最大为 30)并让 O 选择哪个 UTXO 发送给 A,哪个发送给 B.
- 状态缺乏
UTXO 只能是已花费或者未花费这两种状态,这就没有给需要任何其它内部状态的多阶段合约或者脚本留出生机会。这让实现多阶段期权合约、去中心化报价协议或者两阶段加密承诺协议(对确保计算奖励非常必要)非常困难。这也意味着 UTXO 只能用于建立简单的一次性的合约,而不能用于构建去中心化组织等更复杂的“有状态”的合约,并使元协议也难以实现。二元状态与 Value-blindness 结合在一起意味着另一个重要的应用“取款限额”是不可能实现的。
- Blockchain-blindness
UTXO 对随机数、时间戳、前一个区块哈希等区块数据是不可见的。通过剥夺脚本语言基于随机性拥有的潜在价值,严重限制了博彩等应用场景的可能性。
以太坊设计§
以太坊的目的是为构建去中心化应用创建一个替代协议,使得开发者能够随意创建去中心化应用。以太坊提供了图灵完备、value-awareness、blockchain-awareness 和多状态的编程语言,基于以太坊开发域名币只需要两行代码,货币体系也能在 20 行代码内解决,一个完备的转账功能只需要一行代码。
账户体系§
在以太坊中,状态是由叫做“账户”的对象组成的,每个账户都有一个二十位长的地址,状态转换是账户之间价值和信息的直接转移。 一个账户包含以下四个字段:
- nonce 随机数,用于确定每笔交易只能被处理一次的计数器
- 账户当前的以太币余额
- 账户的合约代码(合约账户才有)
- 账户的存储(默认为空)
以太币(Ether,缩写 ETH) 是以太坊内部的加密燃料,用于支付交易费和合约执行费用。
账户分为两类:
- 外部账户:普通用户用私钥控制的账户
- 合约账户:拥有合约代码的账户,它不属于任何人,没有私钥能控制它
当合约账户收到消息时,合约内部的代码会被激活,允许对它内部的存储进行读写,发送消息或者创建其他合约。
智能合约§
智能合约是运行在以太坊上的程序,与传统程序不一样的是智能合约会在以太坊网络上的每一个节点都运行,且结果完全一致。
以太坊提供了一个虚拟机 EVM(Ethereum Virtual Machine),将大大的提高兼容性,安全性和可扩展性。(可以参考 JVM)
智能合约使用为以太坊定制的 Solidity 语言,它是图灵完备的高级语言。
消息和交易§
以太坊的消息某种程度上类似比特币的交易,但也有不同。
- 以太坊的消息可以由外部创建或者合约创建,而比特币交易只能由外部创建.
- 以太坊消息可以包含数据,比特币不能
- 以太坊消息可能会有回执
以太坊中的“交易”是指从外部账户发出的“消息”签名数据包。消息包含如下内容:
- 消息发送者(隐式包含)
- 消息接受者
- 发送的以太币金额
- 数据(可选)
- Gas 执行交易需要的燃料费
挖矿§
以太坊挖矿过程和比特币大抵是类似的,都是基于工作量证明(PoW)竞争区块打包权,执行交易,获得区块奖励和手续费。
但也有一些不同:
- 以太坊的矿工节点不仅仅要执行交易,还要执行合约。
- 合约执行时需要扣除 Gas 费,如果 Gas 消耗殆尽,扣取 Gas,但回滚交易
- 每个区块时间从大约十分钟改为了大约 15 秒
- 以太坊不限制区块大小,只使用了 Gas 来限制,比特币区块大小上限是 1M
- 出块奖励不同,比特币每个区块奖励是 50BTC,每四年减半;ETH 最开始是 5ETH,后面改成了 3,现在是 2,而且出块奖励不是自动调节的,是 hardcode 的
- 由第 5 点可以看出,以太坊不像比特币一样总量有限或通缩(不排除 Gas 燃烧太快导致通缩,或者后续迭代修改奖励机制)
- 以太坊为了降低出块时间大大缩减带来的分叉不稳定可能性以及奖励挖矿者,会提供叔父区块奖励
- 以太坊正在将共识机制从工作量证明(PoW)改成权证明(PoS)
PoS§
以太坊正在将共识机制从工作量证明(PoW)改成权证明(PoS),持续了多年的计划和讨论,暂时没落地,预计 21 年年底切换。
PoS 不再需要 PoW 来消耗算力和能源产生新区块,而是通过质押 ETH 来获得成为验证者的资格。验证者被随机选择去创建区块,并且检查和确认其他验证者打包的区块。 验证者离线或者作恶会被扣除质押金,直到失去股权。
PoS 依然存在 51% 攻击的可能性,但攻击成本非常高,需要掌握 51% 的验证者股权,这不仅仅是一笔巨款,发生攻击后自己的 ETH 也会大幅贬值。
Gas 体系§
跟比特币一样,ETH 交易也需要手续费。以太坊网络上执行智能合约需要消耗全网的计算资源,Gas 可以当做消耗资源的付费。
Gas 也可以避免网络被垃圾消息和交易攻击,因为执行操作是要付出代价的。
以太坊状态机§
以太坊网络是个全局统一状态的状态机,已打包的区块的账户、交易、合约等状态是全网统一且透明的。
以太坊的状态转移函数:
APPLY(S,TX) -> S'
可以定义如下:
- 检查交易格式是否正确(比如数值是否正确)、签名是否有效、nonce 是否和发送者的账户保持一致。如果不是,返回错误。
- 计算交易费用 STARTGAS * GASPRICE,并从签名中确定发送者的地址。从发送人的账户余额中减去费用并 nonce + 1。如果余额不足,返回错误。
- 初始化变量 GAS = STARTGAS,并根据交易中的字节数支付一定数量的 Gas 费用。
- 将交易金额从发送方账户转移到接收方账户。如果接收帐户尚不存在,创建一个。如果接收账户是一个合约,则运行合约的代码直到完成或消耗完 Gas。
- 如果发送者没有足够的钱而导致价值转移失败,或者代码执行耗尽了 Gas,则恢复除支付费用外的所有状态变化,并将费用转移到矿工的账户中。
- 否则将所有剩余的 Gas 返回给发送者,消耗掉的 Gas 作为交易费用发送给矿工。
以太坊应用§
基于以太坊的平台能开发出丰富的应用,分为金融应用(货币,金融衍生品,对冲合约,储蓄钱包,遗嘱)、半金融应用(悬赏系统等)、非金融应用(在线投票系统、去中心化治理等)。
下面是一些例子。
Token 系统§
基于以太坊平台可以极其容易的发行代币,Alice 转账 X 个代币给 Bob 只需要从 Alice 账户余额减去 X, Bob 账户余额加上 Y。
用 Serphant 语言编写一个转账函数的伪代码如下:
def send(to, value):
if self.storage[msg.sender] >= value:
self.storage[msg.sender] = self.storage[msg.sender] - value
self.storage[to] = self.storage[to] + value
代币发行也有了标准协议
去中心化存储§
传统的存储提供商存在偷窥用户隐私的情况,也有厂商因为技术问题或运维问题弄丢用户的文件,服务不稳定的情况也时常发生。
基于以太坊可以构建去中心化存储系统,IPFS(星际文件系统)就是其中的代表。
域名注册§
以太坊可以被用作去中心化域名注册数据库,采取“先到先得”(first-to-file)的策略。
ENS 是常用的去中心化域名服务。
DAO(去中心化自治组织)§
DAO 由编写好的智能合约来执行组织的决策,或由代币持有者(股东)投票决定,不用依赖任何集权,也没有层次结构。
DeFi(去中心化金融)§
基于以太坊网络可以实现去中心化金融,无需依赖交易所、银行、券商等传统金融机构以及他们提供的工具。DeFi 依赖智能合约进行金融活动,可以完成借款、存款生息、交易所、保险、机枪池、金融衍生品等金融业务。
Dex(去中心化交易所)§
Dex 全称 DecentralizedExchange,是采用智能合约构建出的交易所。于传统中心化交易所相比有如下特点
- 无需做市商:Dex 本身不提供市场交易需要的资产,只提供智能合约,普通用户为 Dex 提供流动性可以得到交易的手续费分成。
- 上币门槛低:任何人都能在 Dex 上提供流动性,币种有流动性等于上币成功
- 无需 KYC:Dex 无需注册、KYC 等一系列泄露隐私的操作,仅需要一个钱包
Play To Earn§
区块链的世界里玩游戏可以赚钱,龙头链游 Axie Infinity 曾经好几个季度营收超过传统游戏龙头《王者荣耀》,用户在享受游戏带来的乐趣的同时还能得到代币奖励。
Metaverse(元宇宙)§
元宇宙是沉浸式的虚拟空间,用户可在其中进行文化、社 交、娱乐活动,元宇宙的核心在于对虚拟资产和虚拟身份的承载。话题太大,还远远没有成熟,这里不展开介绍。
以太坊总结§
比特币带来了去中心化的交易系统,以太坊带来了去中心化的应用开发运行平台,也为 Web3.0 打下了基础。
区块链的世界一下子有了更多的想象力,围绕以太坊能衍生出非常多的应用场景,这些区块链网络和应用终究会让互联网甚至世界变成更好的地方(Make the world a better place)。
打个比方,Web2.0 时代没有能够实现的全网统一登录,在 DApps 里面实现了,在 Web3.0 的世界也有可能成为现实!
未来会怎么样不知道,以太坊会存在多少年不清楚,但未来的世界里一定会有以太坊这样的去中心化应用平台,有丰富多彩的去中心化应用进入大众的视野,区块链会真正改变人们的生活。
Let's see what will happen!