# 小白向Web3入门指南

By [YU](https://paragraph.com/@yu-11) · 2022-07-25

---

以太坊是什么？

当然，关于以太坊的文章已经很多了。了解过的读者应该知道，以太坊是第二代区块链网络(不同于第一代比特币网络)，其通用货币叫做以太坊。它可以在以太坊上运行基于智能合约的分布式应用(dapp)。

先看看百度百科上以太坊的词条:以太坊(英文Ethereum)是一个开源的公共区块链平台，具有智能合约功能，通过其专用的加密货币Ether)，提供去中心化的以太坊虚拟机处理点对点合约。

这个解释没问题。每个人都知道以太坊是一个公共的区块链平台。

但是，如果从技术的角度来理解以太坊的本质，可能会让读者大吃一惊:以太坊本质上是一台万能电脑。基于其全球分布式的特点，无疑是世界性的。

以太坊为什么是电脑？

以太坊的创始人从一开始就希望构建以太坊网络，用于通用计算目的。这是一个非常美好的想法:利用分布式网络建立一个全世界人民都可以参与的通用计算系统。注意，与目前主流的互联网系统不同，以太坊分布式网络是一个统一的整体。在计算机科学中，我们说以太坊整体上是一个图灵完全状态机。

“图灵完全性”这个词太迂腐了，读者只需要知道它代表了进行一般计算的能力。这和第一代比特币网络完全不同:比特币网络没有一般的计算能力。

另外，所谓的“国家机器”是什么？

这个用个人电脑来类比比较好理解:电脑运行时，CPU从内存中加载指令和数据进行运算，运算结束后，将中间运算结果保存在内存中(更新“状态”)，然后进行下一次加载和运算。像这样需要保存状态的逻辑机就是状态机。

虽然上面的解释对计算机的运行方式做了特别简化的描述，但目前的计算机系统本质上是一种“计算-保存状态-重算”的所谓图灵完全状态机。

以太坊呢？它是一台通用计算机，也就是说以太坊整体上也是一台“计算-保存状态-重新计算”的逻辑机。

与个人电脑将状态保存在机器内存中(然后记录在硬盘上)不同，以太坊的“状态”记录在遍布全球的数万个节点上。

以太坊的突破性创新在于，它将存储程序计算机等通用计算架构与去中心化区块链相结合，从而创建了分布式单态世界计算机。

以太坊的程序无论在哪里运行，都能生成一致的状态，通过所有的共识规则，数据都是正确安全的。

以太坊的数据记录方式是在每个节点上保存相同的信息。

也就是说，任何以太坊节点都记录了以太坊网络的所有信息。具体来说，这样的节点称为“完整节点”。这意味着以太坊网络的所有状态信息在每个节点上都是完全同步的。

只要不是所有节点同时毁灭，以太坊就可以重生。这是多么强大的生命力啊。

要安装以太坊全网的信息，整个节点需要多大？这个量级比读者想象的要小很多:今天以太坊所有块信息的总大小是345GB。这个容量和现在的个人电脑的硬盘容量比起来，也就几TB，实在是微不足道。

以太坊的总信息容量每天都在不断增加，但速度并不是特别快，因为在以太坊网络上记录信息需要付出很大的代价，这也是以太坊的一个重要特点:所有的操作和数据记录都得花费真金白银。

如前所述，“图灵完备性”一词描述了以太坊系统的一般计算特征。以太坊可以运行用户自定义的通用代码，称为智能合约。这是以太坊的根本创新，不同于第一代比特币网络。

由于智能合约的支持，以太坊可以完成个人电脑可以完成的通用计算任务。从计算机科学的理论上讲，以太坊是一台通用计算机，也就是“计算-记录状态-重新计算”的状态机。

既然以太坊是“状态机”，不妨继续问两个问题:以太坊的状态什么时候更新？以太坊是否像《终结者》中的天网一样自动运行？

也许答案又让读者吃惊了。以太坊虽然是世界计算机，所有节点遍布全球，但其运行机制完全是非并行的。以太坊是一个单线程系统。也就是说，以太坊计算机先计算一个任务，然后把计算结果的“状态”更新给世界上所有的节点，才继续下一个任务。

以太坊用户可以并发提交交易申请，但以太坊不是并行处理的。所有的事务都试图改变整个全局状态，以太坊选择逐个处理事务。

也许读者听说过以太坊网络上日益严重的拥塞和排队问题，现在可以理解了:这是以太坊单线程任务处理机制的锅。以太坊执行的任务只能按顺序排队，用的人太多就怪了。

如何解决以太坊的拥塞问题是区块链技术研究的一个热点。比如你可能听过的Layer2/ side chain之类的新词，主要是为了避免以太坊主链的拥堵(以及高昂的运行成本)。

回过头来看，从任务执行机制来看，以太坊比读者正在使用的个人电脑甚至手机系统要简单得多。

现在的个人计算机系统都是各种实时多任务，各种后台和前台程序并发运行；以太坊在系统运行模式上是一种非常简单的单线程模式，只不过信息状态同时存在于分布式世界的所有节点上。

另外，以太坊底层是否有所谓的操作系统持续运行？这个世界的计算机是不是有点像《终结者》里的天网一样自动智能？还是至少有一个类似电脑的操作系统来控制整体运行？

答案是:不会。

以太坊没有“背后自动操作”这一说。以太坊的所有计算任务都由“交易”驱动，交易由用户持有的以太坊地址账户发起，结果只有两种:成功和不成功。如果交易成功，在以太坊记录全局状态更新；如果交易不成功，全局状态将保持不变。

值得重复的是，以太坊是一个全球性的单一状态机，交易是唯一能让这个状态机前进并改变状态的东西。以太坊上的智能合约代码不会自动运行。以太坊不会在“后台”运行。这一切都是由用户事务触发的。

所以虽然都是通用计算机，但是以太坊的运行方式和个人计算机系统有很大的不同。

至于以太坊计算机是否具有神秘的人工智能，甚至是天网的雏形，读者可以直接回答:以太坊没有自动运行机制，更谈不上人工智能；它不是天网，而是一个很好的分布式平台。从任务执行的底层机制来看，恐怕比你桌面上的笔记本电脑简单多了。

分权的本质和基础

我们总说以太坊代表的Web3网络是一个去中心化的网络。那么什么是去中心化呢？为什么可以去中心化？谁来保证去中心化交易的可信度和安全性？

所谓中心化，在目前互联网模式的意义上，是指用户在互联网上的交互都是基于一家可信公司维护的互联网服务。从技术上讲，它是一个典型的服务器-客户端模型。

比如一个看似简单的点对点转账:用户A通过手机微信或支付宝，面对面扫码转账100元给另一个用户B。实际上是需要腾讯或者蚂蚁金服这种甲乙双方都信任的后台服务器来操作双方的账户。服务器减少用户A的账户金额100元，增加用户B的账户金额100元，并保证这两个操作同时发生。因为微信支付或支付宝已经被广泛使用，用户“信任”他们的后端服务器不会出错。

我们可以看到，在当前的互联网模式下，互联网服务的特点是:

由特定服务公司运营。如果服务器关闭，用户服务可能会中断。当然，无数的工程师努力工作，以确保各种集中的互联网服务的稳定性。

基于这些服务，用户之间的交互，即使看起来完全是个人对个人的，也是通过一个中央服务器来完成的。这背后的底层逻辑是，用户“信任”这些企业服务器是公正的，它们以承诺的方式为用户服务。

这也是为什么大公司提供的互联网服务看起来比小公司提供的更“可靠”和“有信誉”的原因。因为目前大公司的用户量，服务的技术和运营能力更容易赢得用户的信任。

所以本质上，现在的互联网应用模式是提供服务的公司做担保，使用服务的用户选择相信。

什么是“去中心化”？最基本的一点就是没有中心服务器。

以太坊中没有设置在所有生物(节点)上的通用服务器，也没有任何提供特定服务的服务器。换句话说，以太坊中并没有针对具体应用的服务器的概念。只有完全平等的“所有节点”，每个节点都掌握着整个网络的信息状态。

在以太坊，任何一个用户都可以直接发起与另一个用户的交易，这个交易的合法性和正确性不需要大公司服务器来保证；而也正是因为用户交互可以完全点对点，Web3用户不再需要将自己的账户信息保存在一家大公司来完成服务。

用户的账号信息完全掌握在自己手中。当用户A和B有一笔交易，比如以太坊转账，这个操作是由以太坊网整体保证正确的。

如前所述，以太坊网络本质上是一台通用计算机；用户发起的事务是驱动世界计算机产生“状态变化”的唯一机制。但我之前说过，以太坊没有超越它的人工智能；或者更具体的说，以太坊里没有一个整体的程序来充当互联网的服务器仲裁者。

那么，问题来了:没有人或者AI去监管，交易是完全可信的。这么美好的事情是怎么实现的？

答案是，这不是靠“信任”，更不是靠魔法，而是靠一门基础的、绝对可信的科学——数学。下面简单解释一下数学是如何从最底层支持这个奇妙的去中心化系统的。

有一种有趣的数学叫做非对称加密。

记住几个名词:

公钥:一个很大的数，通常用一串十六进制数表示。

私钥:一个较大的数字，由一串较长的十六进制数字表示。

数字签名(Digital signature)是一种信息处理方法，任何二进制信息都用“私钥”进行数学处理，得到一个字符串称为数字签名。

简单类比一下，可以把公钥看成一个账号，把号码公开；私钥是一个密码，只有用户知道。公钥和私钥是一一配对的。

一个奇妙的属性是，知道了私钥就可以很容易地推导出公钥；但反之则不然。如果你知道公钥，你不能推断出私钥。这也是“不对称”的来源。

“非对称密码”的奇妙数学理论保证了一个结果:任何人得到公钥和数字签名的信息，都可以用标准的数学方法加以确认，这个数字签名是用这个公钥对应的私钥进行处理或“签名”的；并且数学理论保证只有这个私钥才能得到数字签名结果。

所以，数学理论向我们保证，这个带有数字签名的信息，确实是由拥有相应私钥的人“签名”的，别人无法伪造。

但是这和去中心化的交易有什么关系呢？

在以太坊系统中，我们每个人的账户地址就是一个公钥。这不是比喻，而是字面意思。如果读者用过以太坊相关软件，都知道以太坊的账号是用十六进制地址表示的。这个地址只不过是密码学意义上的公钥。

那么，用户的私钥在哪里呢？

其实每个第一次使用以太坊的人都会被Web3账户管理软件提示记住一串助记符，并且会被软件反复提醒。不要跟任何人说助记符，更不要弄丢了，否则账号再也找不到了。这个助记符是私钥的某种映射；简单来说，这串助记符就是私钥本身。

Web3的账户管理软件，即所谓的Web3“钱包”，在本地为用户存储和管理私钥，并帮助用户生成由私钥数字签名的交易请求并发送到以太坊，从而成为用户Web3网络的事实入口。

(这里还有一个小细节。用过MetaMask等Web3钱包的读者都会知道，进入钱包要设置额外的密码。但必须注意的是，这个密码不是以太坊的密码。以太坊账号没有密码，用户的私钥是访问账号的唯一且最高的凭证。这个密码只是用来保护本地存储的以太坊账号的私钥信息，甚至密码本身也不与网络存储同步:私钥信息本身不会与服务器同步，所以钱包密码没有理由在线同步。钱包是一个本地化的软件。)

当一个以太坊账户发起与另一个账户的交易时，交易请求的所有信息都会被该账户的私钥进行数字签名，签名后的信息会和交易请求数据本身以及账户地址(即公钥)一起广播到以太坊。

在以太坊中，没有一个集中的服务器负责这个交易请求，所有收到大量广播请求的节点都会同时确认这个交易的合法性。

(这里隐藏了一点细节:只有所有想要获得系统奖励的节点才会主动验证用户交易的合法性，以自己的工作量赢得系统奖励的以太坊——这就是所谓的“挖矿”。)

以太坊交易的验证方式只是使用了前面介绍的密码验证机制:

发起方的账户地址信息为公钥，同时，交易信息上有声称源自该地址的交易请求信息和账户私钥的数字签名。然后，任何一个全节点都可以通过公钥和数字签名的验证，验证交易请求确实来自这个以太坊账户。

也就是说，以太坊中的任何一个节点都可以绝对肯定地确认一笔交易不是伪造的，而是真正来自账户所有人。在确认了这一点之后，每个以太坊节点都可以愉快地根据事务请求执行操作，并在以太坊数据链路上记录新的状态结果。这是以太坊区块链的核心加密通信机制。

这种可靠的通信机制，基于密码学理论，从根本上使得任意两个账户都可以在没有中央服务器的情况下完成交易。真的不需要第三方的信任，所有操作都是点对点的；换句话说，这种点对点交易的“可信度”是有数学理论支持的。

数学有保障。以太坊有人说给你一笔钱(发起交易)，你马上就能判断是骗子还是天上掉馅饼。

最后，我们能相信的不是承诺，而是数学。

以太坊账户里有什么？ 以太坊账户里有什么？总之，以太坊账户里基本什么都没有。

以太坊账户有两种，一种是给人的，叫外部账户；一种是智能合约，称为合约账户。

“智能合约”这个词确实高深莫测，但其实所谓的智能合约就是一段代码，而且在以太坊的机制下，智能合约代码一般都很短，几百行的智能合约已经很庞大了。

外部账户和合约账户都由以太坊中的一个地址表示。对于外部账户，也就是人用的账户，里面只有一个数据字段，就是这个账户拥有的以太坊的金额。对于智能合约账户，数据稍微多一点。除了以太坊金额字段(没错，智能合约账户本身独立有以太坊)，还有一个数据字段，用来存储智能合约本身的代码，以及这个智能合约需要的数据存储区域。

除了以太币的金额，以太币账户中还有一个内部计数，叫做nonce。这是账户中交易次数的统计，每交易一次就加1。这个计数对于防止“可重用攻击”非常重要。

简单来说，如果有别有用心的人把这个账号发送的交易数据复制一次再发出去，由于数据包中的公钥和签名都是真的，如果用户账号中没有单向增量交易计数进行验证，交易就有可能被重复执行。

以太坊账号的架构特别简洁，就像以太坊区块链网络是通过最简单的密码通信连接起来的一样。

智能合约的代码也很简单，但智能合约的强大之处在于，整个以太坊代码都可以“为我所用”:每个智能合约代码都可以自由调用另一个智能合约。

这和搭乐高积木特别像。每一块砖看起来平淡无奇，但无数块砖可以组合起来，建造出辉煌的建筑。

以太坊的建筑让人想起蚂蚁的社会组织。每只蚂蚁能做的事情是有限的，但整个蚁群加在一起，似乎有更高层次的智能存在。这不是人工智能意义上的，而是社会学意义上的。

以太坊的创始人一定是一群理想主义者。只有这样的人才会坚持构建一个新的世界，这个世界可以基于最简单的规则运行，却可以自行衍生出复杂而强大的社会功能逻辑。

在进一步了解以太坊的过程中，我们会一次又一次地感受到这一点。

以太坊，气体 以太币(简称“以太币”)的概念在前面已经涉及了多少？这里继续说清楚。

以太坊现在值钱了。诚然，这一价值波动很大，关于区块链货币的真实性有许多讨论。但笔者可以判断，这个价值会有波动，但以太坊的价值不会消亡。原因有很多，这里只讨论一个技术性和根本性的:以太币最基本的功能是什么？

没错，以太坊就是以太坊的生态货币。它现在可以购买很多虚拟物品，但以太坊的内在价值，在技术层面上，是为以太坊网络设计的计算资源的购买力。

这里需要说一下以太坊运营的一个核心概念，运营需要支付相应的费用。

众所周知，在以太坊中，每个用户都可以自由发起全网同步的操作，也就是“事务”。但是这个交易消耗了全网的计算资源，相应的费用由发起账户支付。

以太坊用一个气体单位(英文意为汽油，特殊图像)来衡量执行特定操作所需的计算和存储资源。

这与当前互联网生态系统中用户基本可以免费使用网络服务的理念相悖。任何以太坊用户想要发起交易，都需要先缴纳相应的燃气费。gas费是一个特定操作的固定值，例如，将两个值相加需要3gas，计算一个哈希值需要30gas，发送一个事务请求需要21000gas。

以太坊里用来买气的，无非就是以太坊。有意思的是，以太坊购买的燃气费“汇率”还在浮动。

所以，如果我们确信以太坊网络有运行的价值，那么以太坊就永远有价值，因为它标志着以太坊网络的计算资源。

以太坊上的计算为什么设计成付费？天下没有免费的午餐，用户付费是理所当然的。不过这里还有一个原因:以太坊是一台万能电脑，万能电脑的运行可以进入无限循环。

如果PC循环出现死锁，您可以简单地将其拔掉并重新开始。但是以太坊网络没有外挂。如何才能避免以太坊的恶意循环死锁？

除了关注底层设计，最重要的是引入燃气成本，每一次操作都需要支付燃气成本。这样，无论如何，在花费成本的那一刻，无限循环计算自然会终止。

气体是以太坊极其重要的一部分。创建交易的用户需要表明他愿意为交易的执行支付的价格，以防止网络中无意或恶意的无限循环以及其他形式的计算资源浪费。

一个精彩的设计，它不需要设置复杂的规则来制约，只需要讲利益。

人性是逐利的，这也是人性的一个弱点。以太坊的设计反过来利用人性来保证系统的运行。这种设计思路在整个以太坊系统设计中不止一次体现。

人的欲望就是正义，以太坊真的践行了这句话。

钱包，远程客户端 3网络钱包是区块链网络用户每天都要处理的工具。它是事实上的Web3门户。

第一次接触Web3钱包的人，大概会把它比作微信支付钱包或者支付宝钱包顾名思义，就是服务器支持的某种货币的系统。这是Web3钱包最大的误区。

3 Web3 Wallet是一款本地化的区块链帐户管理工具。本地化意味着它不会在线存储个人帐户数据。以太坊上的所有活动都是通过自己的以太坊地址账户向以太坊网络发送交易请求来驱动的。那谁来帮用户做这个呢？是web3钱包软件。

例如，当用户打开NFT交易市场并下单购买NFT时，网页会调用浏览器的MetaMask钱包插件。MetaMask插件存储用户以太坊账户地址的私钥。MetaMask钱包帮助用户打包交易请求数据，与用户确认所需费用，然后将交易请求信息发送到以太坊网络完成交易。

用户丢失以太坊私钥怎么办？答案是——凉拌。私钥以一串助记符的形式呈现给用户。如果这串助记符丢失，本地存储密钥的钱包软件被意外删除，对应的以太坊地址账号将永远无法访问。

那么，有没有可能有一个集中的服务来托管用户密钥呢？

这样做的好处是，用户仍然有机会通过传统的身份恢复方法从服务器恢复他们的帐户密钥。这在可用性上是可行的，还有一些Web3的产品比如MetaNotey。IO已经在这么做了——为用户提供Web3账户托管服务。

毕竟web3钱包也有使用门槛。托管后，用户的Web3学习曲线会更加平滑；另一方面，如果允许中央服务器托管自己的Web3帐户，它将回到传统的互联网主张，并失去100%的隐私安全。私密性和易用性很可能无法同时得到100%的满足。我们有一个选择。

另外，像MetaMask这样的账户管理工具还有另外一个名字:remote client。

在以太坊这样的区块链网络中，所有的节点都是所谓的客户端(这个名字并不准确，因为所有的节点也都承载着服务以太坊用户的功能)。以太坊中的所有节点都是平等的，它们都包含了整个以太坊的完整信息。

但很多用户并不想成为全节点，只是想接入以太网。于是就衍生出了远程客户端的概念。远程客户端不需要在本地存储整个以太坊网络的信息，他们关于以太坊的信息是通过访问其他全节点来完成的。远程客户端负责向以太坊广播账户发起的交易，并接收结果。

类似MetaMask的Web3 wallet本质上是一个远程客户端。

代币 “Token”是一个经常被提及的概念。Token是英文token的直译，指的是用户在以太坊上通过智能合约可以自行发行的虚拟货币。只要接口符合协议的ERC20标准，任何智能合约都可以成为令牌的发行者。

为什么经常说发行硬币是“空气币”和“韭菜割”？实际上，原因很简单，因为每个人都可以自由地创建智能合约并“发行”某种令牌。

“发行”是个高级词，但在技术层面上，代币合约能做的事情很简单，就是几个代码声明一定数量的代币，通过标准的ERC20接口，将代币授予不同的以太坊账户。

如前所述，每个以太币账户都有一个字段记录这个账户的以太币金额。那么，这些代币奖励的金额是否也记录在用户自己的以太坊账户中？看似合理，但答案会出乎你的意料:不是。

---

*Originally published on [YU](https://paragraph.com/@yu-11/web3)*
