文章介绍了以太坊的起源和基本概念,与比特币相比,以太坊提供了更多的灵活性和自定义功能,特别是通过智能合约实现自定义状态和状态转换。以太坊采用了账户模型和燃料机制来确保网络的稳定性和安全性。
这篇文章是关于区块链更大系列文章的一部分。如果这是你遇到的第一篇文章,我强烈建议你从系列的开头开始。
我们要感谢比特币,它向世界介绍了区块链技术的基础概念。交易和区块、激励和共识——这些是在不同区块链中以不同方式表现的普遍概念,但核心概念大致相同。
然而,比特币所能做的也只是有限。毕竟,它被构想到一个 数字现金系统,无法满足其他需求。
我当时没有到场,但我想那时人们一定觉得这项技术有很多 未开发的潜力。如果比特币的功能和安全保证能够转化为其他类型的应用,那该多好……
哦,可能性真是无穷无尽!
要等到大约 7 年后,区块链历史中的下一个飞跃才会显现,那就是 以太坊,它在 2015年上线 (30 July 2015),带来了巨大的功能性范式转变。
趣味事实:以太坊的开发是通过[比特币众筹](https://cryptopotato.com/ethereums-history-from-whitepaper-to-hardforks-and-the-eth-merge/)进行的!
这个新技术的重要性何在?为了更好地理解这一点,我们需要稍微拉远视角,尝试改变一下我们的思维模型。
拿一杯咖啡,让我们开始吧!
什么是 区块链?
简单来说,区块链是一系列包含交易的区块,所有网络参与者一致认可。这一序列建立了一个 共享的历史变化。
如果你仔细想想,整个区块链实际上就是一个配方,描述了如何从 初始状态 到 最终状态——这是一种关于如何从 A 到 B 的说明。
例如,在比特币中,区块链展示了我们是如何从网络的初始状态(一些用户具有初始余额)到当前状态(很多用户拥有大量UTXO)的。
当然,正如我们所知,比特币中的交易纯粹与 现金转移 有关。因此,可能的 状态 只是用户余额,形式为多个 UTXO。
但是,如果有一种方法能够表示 其他类型的状态 呢?我们可以从某个初始状态开始,然后交易会随着时间的推移进入并改变它。这就是 状态机 的工作方式,而在这个上下文中,交易代表 状态转移:有效的方式可以让我们从一个状态转移到另一个状态。以下是一个非常简单的例子:
状态用灰色表示,转移用紫色表示。
在上面的例子中,没有“余额”!
此外,我们无法直接从 Asleep 状态切换到 Working 状态。只有在我们采取几步有效的步骤后,才能让一个状态转移到另一个状态。
这就是超脑大开的想法:我们为何不让用户提交 自定义状态 并定义他们自己的 状态转移规则 呢?那么,网络只需要提供一套基本功能——例如处理共识——而用户则可以 构建 更小的状态机以满足他们的需求。
天啊。这真是聪明。
这就是以太坊的主要创新:通过允许用户定义 自定义行为 来赋权。
实现这一点的重要性 不容小觑。它给了用户自由去构建任何他们想要的程序,同时利用区块链提供的所有强大功能——状态不可篡改、抗审查性,你知道,所有好的东西。
但怎么办呢?它是如何管理这一切的?我们必须将细节推迟到系列的后续讨论中。目前,记住以太坊是第一个将 可定制性 放在用户指尖上的区块链就足够了。
让我们关注以太坊的其他一些方面,这些方面也代表了我们思考这个区块链的重要转变。
与比特币的UTXO模型不同,以太坊使用基于账户的模型。这对我们来说可能更为熟悉:作为用户,我们拥有一个账户,所有的资产都与之关联。这是一种更 自然 的思考状态的方式。
你的账户可以算作你的区块链“用户”。
这带来的第一个结果是账户的余额以 单个值 存储。在比特币中情况并非如此——你的总余额是所有可用UTXO的总和。
这个余额以以太坊的 原生货币 或 代币 存储,称为 以太。存储在一个地方意味着读取比特币余额的效率更高,因为比特币余额分散在许多UTXO中。
现在,我在前几段中承诺了一个 灵活 和 可定制的状态。仅仅跟踪一个用户的余额是远远不够的。我们如何表示用户的本机余额截然不同的其他状态呢?
这得益于一种 特殊类型的账户。
到目前为止,我们所讨论的账户实际上被称为 外部拥有账户(EOA)。外部账户,因为它们属于“区块链外部”的用户,这些用户持有一个 私钥(与一个 地址 相关联),并能够用它签名交易。
然后,我们还有 合约账户——这就是魔法发生的地方。
告诉我更多。
这些账户保存用户创建的 程序——这些程序定义了自定义状态和自定义状态转移。它们强制执行用户必须遵守的一组规则——在这个意义上,它们像我们的现实世界契约,但要好一些:规则是由代码强制执行的,而不是由当局或个人强制执行,后者容易出错。正因如此,这些程序被称为 智能合约。
重要的是,它们在传统意义上并不“属于”任何人。虽然合约账户有识别它们的地址,但它们没有与之关联的私钥。
合约账户与 EOA 的工作方式根本不同:它们由其 关联程序 或 代码 控制。它们的唯一目的是定义和处理某个 自定义状态。
状态不能自行更改:每个状态转移都需要 明确请求——或来自 EOA 的交易。这等同于说合约账户不能发起交易。
不过,智能合约可以调用其他小合约,但初始调用必须由 EOA 完成。
我们只是触及这个主题的表面,但这些高级概念是一个很好的开始。如我之前提到的,我们还有时间去了解更细微的细节。
无论 智能合约 是如何执行的,我们目前知道的是,它们是可以在区块链上执行的 程序。在这个意义上,区块链如同一个巨大的分布式计算机——通常称为 以太坊虚拟机(简称 EVM)。
由于任何人都可以提交任何任意代码,我们必须处理一个特定问题。想象一下,有人提交了一个 无限循环,如:
while (true) {
// 做一些事情
}
语言在这里并不重要——只要知道这是一个无限循环。当然,实际上还有特别的语言来开发智能合约,比如Solidity。
每个状态转移都需要进行 验证 以确保其有效性,并计算下一个状态。唯一的方法就是运行智能合约代码。
任何尝试运行此代码的节点都会 陷入这个循环,有效地使其冻结。显然,网络不能因这样一个小的简单错误而暂停。想象一下:你在刚提交的程序中发现一个小错误,而整个区块链却“无法处理,停止工作,好的,谢谢,再见”。
是的,不,谢谢。
一定有办法保护自己免受此类问题,对吧?
确实有办法!这也是以太坊工作原理的另一个基本方面。
我们的目标是避免在智能合约代码中进行过多执行或无限循环。解决此问题的一种方法是限制交易可以执行的代码量。简单而有效!
以太坊的做法最好通过类比来解释。
想象每个交易是一辆 汽车,你将会加载一些 燃料(Gas),然后上路。如果你的目的地很近,你加载的Gas可能就足够了。但自然而然地,如果你因某种原因需要驾驶更远的地方,你在某一时刻会耗尽Gas!
Gas 就像类比中的Gas,它会在每行执行的代码中消耗。如果你遇到了一个无限循环,执行将正常进行,同时消耗Gas——在某个时刻,Gas会耗尽,你的交易将失败。
这意味着每个交易都应该指定它愿意消耗的最大Gas量。
最后,用户必须 支付 这笔Gas费!支付Gas费的重要性有多种原因,但现在还不是考虑这些的时候。我此刻只想讨论你是 如何 支付Gas费的。
是的,你大概猜到了:你用 以太 支付,这是原生货币。然而,有一个附加条件:Gas单位衡量所使用的计算资源。为了将消费的Gas单位总量转换为作为交易费要支付的以太数量,我们需要一个 价格:
这个价格以 以太每Gas单位 测量(实际上是以 wei 计算的)。有趣的是,这个价格会随时间 变化,这将是我们在未来的文章中讨论的因素。由此而来的后果是:同一操作在不同时间可能具有不同的Gas费用。
这就是对于这个简短高层次介绍的最基本内容,朋友们!相信我,我们有 充足的时间 来扩展每一个新想法!
好的!
我一位聪明的老师曾告诉我,接触新主题的最佳方法是从简单概念到复杂概念、从一般到具体。
这正是我们今天所做的:我们对以太坊和比特币之间的一些关键区别进行了总体分析。
尽管如此,这个简短的介绍确实带来了许多新的想法:用户和合约账户、链上程序,以及一种新方式来考虑费用。而最好的部分是,我们甚至还没有开始理解 这些是如何运作的!
为此,我们必须更深入研究。
所以在下一篇文章中,我们将开始深入探讨使这一切成为可能的以太坊内部工作。当我们很快再见时!
- 原文链接: medium.com/@francomangon...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,在这里修改,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!