banner
leaf

leaf

It is better to manage the army than to manage the people. And the enemy.

以太坊为五个主要部分:

以太坊为五个主要部分:#

“以太坊 101” 基础篇

“以太坊 201” 深入探讨更为复杂的概念

(以太坊 301)加密语境中关于身份认定部分

(以太坊 401)去中心化金融部分

(以太坊 501)关于以太坊的未来部分,最后这一部分尤其探讨向 PoS (权益证明机制) 的过渡(如果现在这些与你无关,则不要过于忧虑)。

在每一部分,我解释了很多复杂的专业术语,编制了许多实用的图表,以通俗的语言阐释以太坊中最为重要的概念性主题。并且,我还在指南的末尾附上了额外资料,供大家继续深耕。

在了解以太坊时,你可以针对性地运用指南的不同部分进行快速阅读和检查,或将指南作为探索未来的一个灵感点,或作为一个链接分享给最近对加密领域感兴趣的朋友。

举例来说,可以按 Ctrl+F 键查找 “Uniswap” 更多地了解去中心化交易所。或者,还可以检索 “ wallet ”(钱包)学习更多有关非托管钱包的安全知识。

在 Vitalik Buterin(以太坊联合创始人)的一篇热门博客帖子中,他写道,

“有时候,差别极小的过度简化正是我们了解世界所需要的东西。”

通过将这些复杂的话题浓缩为极简的内容,我希望这则指南可以帮助所有人了解以太坊世界。

以太坊 101 - 基础篇

在认识以太坊之前,我们需要了解它的基础概念。

在这个部分,我将阐释什么是区块链,区块如何添加到链上,以太坊如何像世界计算机一般运作,以及智能合约如何运行。

区块链 - 区块链是指特定网络中一系列独立计算机处理和维护的所有交易的公开记录本。比起用中心化的方式管理这些交易数据库(就如 Amazon 或 Facebook 控制自己数据的方式),区块链上不存在单个数据所有者,使之去中心化。在这个网络中的计算机遵循着特定的规范和机制,以保存所有交易的记录。

这些规范让计算机能够同意网络中发生的所有(交易)行为,或就其达成共识:计算机 A 是否转出资金给计算机 B ,计算机 B 是否发送这些资金给计算机 C,以及什么时候呢?上周发生了什么事呢?六个月前发生了些什么?

网络中的计算机是独立的,因此,计算机 D 和 E(和 F 和 G ......)可能不认识计算机 A、B 或 C。区块链的一系列规则意味着,单个计算机无须独自验证其他计算机提供的数据的准确性,就能对区块链历史上发生的交易达成一致。

换句话说,计算机之间不用信任彼此就可以达成共识。在网络中的计算机之间,这种去信任共识机制具有举足轻重的重要性。

区块链数量十分庞大,每一条链遵循着自行设置的规范达成共识。以太坊区块链致力于为给不同领域中酷炫的、新颖的应用提供基础设施服务与设计空间,比如游戏、艺术、金融和社交媒体类的应用。

共识机制 - 当区块链上的所有计算机都同意发生在网络中的事实,这就是 “达成共识”。单个计算机之间根据区块链的规则达成共识,并且每一次将新交易打包至链上,所有计算机都需要经历达成共识的全过程。

一旦这些计算机达成共识,交易区块则被打包到区块链上,成为网络历史记录中的一部分。

大致的意思是,假设计算机对每次新交易添加至链上的行为无异议,那就相当于同意了区块链的整个历史记录,因为他们不得不参与其中的每一环。

共识是一个支撑整个区块链世界的重要概念。如何在不信任网络中任何参与者的情况下,验证上面发生的交易,这是一个非常难以解决的人类问题,而区块链是这一问题的最优解。不同规范(或是 “共识机制”)可以促使个人计算机在区块链中达成共识。下面介绍两种主要共识机制:

工作量证明(PoW)- 在工作量证明机制中,计算机之间以竞赛的方式解决复杂的数学问题。网络会给第一台解决问题的计算机提供经济奖励,这激励着计算机背后的人不断更新并运行节点(换言之,确保网络一直处理交易)。

也许你曾听过,这种竞相解决计算密集型数学问题的过程就叫 “挖矿”。基本上,经验证为合法的交易,可以安全地添加到区块链上。这也是比特币区块链以及当前以太坊区块链在实施的规则。

工作量证明机制也有它的缺点,主要是

1)最终,最强大的(和最昂贵的)计算机能够更快地解决问题,因此,富者衡富;

2)在计算机上解决高难度的数学问题需要消耗很多精力,这已经成为整个区块链最为人诟病的一点。

权益证明机制(PoS)- 相对于耗费大量算力来达成共识(如 PoW ),权益证明机制则是利用惩罚的风险(和一些经济激励)约束 / 激励参与者。

在权益证明机制中,参与者筹备资金(技术角度而言,他们 “质押” 自己的资金),并换取进入随机选拔程序的资格。被随机选中的计算机需要验证下一批即将到来的交易。当随机选中的计算机正确地处理交易(在权益证明机制的限制范围内),可以获得奖励。

如果被网络随机选中的参与者违反了权益证明机制的规定,那么这个参与者质押的资产就会减少(或 “被罚没”)。

PoS 区块链不会同时请求网络中的所有计算机破解那些数学难题,而是通过随机选取计算机进行交易验证。略过繁重的计算过程可以减轻 PoW 机制出现的两大主要问题。这也是以太坊在规划 2022 年部署下一代区块链时,打算启用这套共识机制的部分原因。

节点 - 为了以太坊区块链的运作,网络中的参与者需要运行特定的软件,协助他们与区块链进行交互。我倾向于认为,每个节点作为独立计算机运行着以太坊软件。

同样地,节点(网络中的参与者)越多就越去中心化,但有时,维护所有节点有些麻烦,因此,不同的节点针对不同的目的:

全节点 - 全节点用来储存完整的区块链数据,帮助区块进行验证并打包到链上。这类节点还为过去的交易提供有效性证明。

轻节点 - 轻节点的功能在设计上相对少于全节点。比起储存完整的区块链数据,轻节点仅仅储存较少量过去交易的证明。这类节点让更多人参与到网络中,因为它们存储更少的数据,运行起来更加经济。

归档节点 - 归档节点是以太坊世界的程序库 / 维基百科词典。它们储存全节点所有的数据,甚至更多。分析工具和钱包提供商也许会利用归档节点来拉取很久之前的信息。

客户端 - 这是以太坊的软件,使得计算机(节点)能够同以太坊网络进行交互。单个节点可以选择他们想用的客户端软件,但多用一些不同类型的客户端对于去中心化至关重要,以免其中某个客户端出现 bug 或者问题。

现在有执行客户端和共识客户端两种类型,但这不在指南介绍的范围内。

现如今,链上有很多可用的客户端,最近以太坊社区争取让最大的一些节点运行机构多样化其运行节点的客户端。

重要的是,任何想要参与运行以太坊网络的用户,都可以创建他们自己的客户端,这意味着用户不必信赖第三方实体为其验证区块链。

状态 - 以太坊区块链的状态指的是在任何特定时间点区块链上的账户余额情况。一旦有新的事物产生(比如处理一个新的交易区块),那么状态则会更新并精确地反映区块链在打包新交易后的状况。

以太坊的状态保存不同账户及其余额的信息。换言之,一旦区块链验证新的交易,状态也会随之更新,利用刚添加的新交易信息反映出新的账户余额。

侧栏 - 如何将区块打包到区块链上?

一个用户可能想用以太坊区块链发送一些资金给另一个用户。一旦发起方用户这边发起了交易,这笔交易就要在接收方用户收到这笔钱之前,被打包至交易链上。

当这样一笔交易打包到以太坊区块链上,各个节点需要在交易打包上链并变成其一部分历史之前,完成整个达成共识的过程。

在下图中,它讨论的是上述的简单交易,就是一个用户发送资金给另一位用户。这笔交易被打包成区块,等待节点一同达成共识后将它添加至链上。

image

image

来源: Understanding Ethereum

事实上,区块链只是所有用户对于发生在网络中的历史交易达成共识的方式,而区块链状态是已实时更新过新交易的账户余额。

image

源: Understanding the Ethereum Yellow Paper

智能合约 - 在一定程度上,智能合约类似于物理世界中使用的传统合约的电子版。在传统合约中(例如雇佣合同或者公寓租赁),两个及以上的合约方建立一套条款,再通过律师和司法系统执行合约中的条款。

而在智能合约中,两个及以上的用户也是创建一套规则,却不是通过司法体系执行合约,而是由程序代码编写成智能合约,发送到区块链(或者部署在区块链上)。智能合约会根据已编好的代码自动运行,而不需要律师执行。

上述的侧栏部分叙述了区块打包上链的过程。智能合约是经由区块内的交易部署到链上的代码。未来的交易可以 “调用” 或与智能合约交互。

举个简单的例子,A 用户希望和 B 用户就比特币在未来两年内的价值打赌。A 用户认为比特币在 2032 年 1 月 1 日时会超过 100,000 美元,而 B 用户则认为比特币会低于这个价格。

那么,两位用户可以建立一个智能合约,在合约里放置彼此的资金,再约定一条简单的规则:如果比特币在 2032 年 1 月 1 日超过了 100,000 美元,智能合约则释放这些资金给 A 用户,反之,智能合约将资金打给 B 用户。这个交易过程十分简单、直接且去信任。

智能合约允许任何人以去信任的方式在世界计算机上部署代码,并且,也使得任何人去信任式地验证代码的内容(只要他们可以读懂代码!)

最终,智能合约技术的存在已为一波涌现的去中心化应用浪潮带来巨大的机遇,而没有区块链技术,这些就无法成为现实。

比特币和以太坊最大的区别是,以太坊催生了一波智能合约计算平台的浪潮,这些平台是可以编写智能合约代码并直接部署到链上的区块链。

以太坊基金会研究员 John Stark 写了一部关于智能合约的文章,如果你愿意更加深入了解这个概念,我建议你阅读这篇文章。

以太币(ETH)- 以太币是支持以太坊区块链的原生货币。在工作量证明机制中,(挖矿)奖励通过以太币支付给解决数学难题的计算机。并且,参与者在权益证明机制中质押的资金也是用以太币 (需质押 32 ETH)。

以太币是加密货币的名字,以太坊是网络的名字。

以太坊虚拟机(EVM)- 以太坊虚拟机这个名字是指 “虚拟的” 计算机,它由所有参与以太坊网络的独立小型计算机组成。这样单个的大型计算机并非实际上处于某个位置的 “ 物理层面的 ” 计算机,而是尤如一台大型计算机(全球性的)一般工作。

以太坊区块链的状态就活跃在这台计算机上,并且,当下一个区块打包至链上时,它负责执行状态更新的规范。如果以太坊网络中的用户想将智能合约代码纳入自己的交易中,那么这个代码便会在 EVM 上运行。

侧栏 - 以太坊虚拟机如何运作?

尽管对于新手来说,可能没必要了解 EVM 运行的复杂性,但它是以太坊区块链的重要组成部分,还能帮助读者大致了解去中心化如何规模运作。

如下图,尽管图片有些复杂,但画得不错。一起按照步骤来看:

image

们首先从以太坊区块链在特定时间点的状态开始。这左边的方框称作 “世界状态 σ t”

一笔交易被打包到链上,例如从一个钱包转移以太币到另一个钱包,在图表顶端上的方框,就是 “信息调用交易”。

在交易发生之前的以太坊状态(再次提示,左边的方框)加上新交易(顶上的方框)的输入数据,都在 EVM 上运行。在这里,EVM 更新区块链的状态。

一旦 EVM 更新了状态,新的状态 “World state σ t+1” 会被储存起来。

代币 - 通常,代币指区块链上的资产。代币可以代表许多不同类型的资产。

举个例子,一般认为代币是可以当成货币的资产,或者是在具体决策过程中给持有者提供投票权的资产 (治理代币),又或者完全可以作为其他东西。代币是加密世界中代表着不同种类资产的价值的原子单位。

同质化代币 (fungible token) - 这个术语 “ fungible ” 指的是可以相互转换的一些商品或是物品,即可替换性。这不是一个加密原生术语,一般的货币指的是同质化货币。

例如,我口袋里的 1 美元可以换成你口袋里的 1 美元,并且这两个 1 美元都可以用来买 1 美元的东西,它们是等价的。当可替代性应用于加密概念中,它指是否可以与其同一集合中的其他加密资产进行互换。我的以太币和你的以太币可以互换。

非同质化代币(NFTs)- 非同质化代币指的是所有因其独一无二的存在而不可互换的数字资产。

虽然 NFT 主要是因为数字艺术和数字藏品出圈的,但它不止于这种表现形式,它可以是任何独一无二的数字资产。

数字艺术和数字藏品恰好是 NFT 最早的用例之一,而已经引起了广泛公众的共鸣。这种代币引起了许多人对加密界的兴趣,但我认为诸如无聊猿和 NBATopShot 此类 NFT 项目的兴起导致广大公众低估了在以太坊区块链这样的可信结算层上部署独一无二的数字资产所带来的其他方面的效用。

从概念上看, NFT 还可以应用于许多数字收藏品以外的其他用例。如果一种产品或者服务需要能够验证某种特定数字资产的所有权和其稀缺性的有效性,那么公共区块链上的 NFT 就派上用场了。

例如,音乐会场地可能会用 NFT 替代门票,或者视频游戏的设计师可以将那些难以在游戏中获得的资产转为 NFT ,由此用户之间可以转让或交易。

这个概念还能玩出新花样:一些资产可以既是同质化的,又是非同质化的,这取决于同它们进行比较的集合。例如,如果我持有一个 19 世纪的 1 美元老币,并将它作为收藏品放置于玻璃罐中。这很明显,这 1 美元(非同质化的!)和被揉作一团后塞在口袋的美元新钞截然不同。

不过,如果我将玻璃罐里的 1 美元掏出来去星巴克消费,他们(可能)愿意收下它。这是因为,从某种程度上看,它跟其他一美元纸币是可互换的,尽管从其他角度而言,它们完全不是一回事。

image

来源: Graphical Guide to Understanding Uniswap

以太坊 201 - 进一步深入了解

在这一部分,我将阐述 gas 成本高昂的原因,可组合性如何运作,以及用户如何与创建在以太坊上的应用交互。

燃料 (Gas) - 与以太坊区块链的每次交互都会消耗成本 (gas),而这个成本取决于以太坊虚拟机运行那段特定代码需要消耗多少算力。

由于区块链上的每个区块的空间只能容纳固定数量的交易,而 gas 的概念可以帮助以太坊分配稀缺的区块空间资源。

越是复杂的交易可能需要支付越多的 gas 才能完成。比如,从一个钱包发送以太币到另一个也许只需要在虚拟机上运行几行代码,因此,它需要的 gas 少于算力大的交互所需的 gas ,如在去中心化交易所兑换一些代币(阅读下文的去中心化金融部分了解更多)。

你可以把 gas 看作类似于中心化的信用卡公司收取服务的手续费。

例如自 20 世纪 50 年代创建、运作且维护到现在的 Visa ,会向所有使用 Visa 网络的交易收取固定的 3% 费用。

相对而言,以太坊的 “手续费” 并不固定,它基于交易时网络的供需情况而定。Gas 费用于支付参与以太坊区块链运作的计算机(请阅读下文了解更多)。

Gas 以 ETH 计价,并且用户可以选择支付更多的 gas(通过给计算机支付小费的方式)以加速交易时间,提高交易打包到下一区块的几率。

Gwei - 在技术上 Gas 的价格表示为 wei ,是 ETH 最小的增量单位。1 wei 等于 0.000000000000000001 ETH(10 (18) wei,也就是用 5 个逗号才能表示 1 ETH),1 gwei 等于 1,000,000,000 wei,所以比较 gas 价格时,用 gwei 兑 ETH 的计价方式更为方便。

用户已经习惯了以 gwei 为单位来表示 gas 价格。比如 0.0001 ETH 是 1 gwei,这个 gas 费用很低。用户可以使用 Gas.Watch 留意实时的 gas 价格。Gas 会随着打包进区块链的交易需求上下波动。

它应该是发音为 gwey,但我听过有人读 goo-ee。所以,我不太敢向别人问它的读音。

侧栏 - 为什么需要 gas,它如何应用?

负责验证区块链交易的计算机需要在经济上给予激励。如果不发放这些激励,将难以说服他们运维计算机和区块链,而要是链上没有充足的计算机进行运行,就将导致区块链变得过度中心化,仅由几个用户控制。

如上所述,支付给网络参与者的 gas 会根据打包进区块链的交易需求而波动。

image

来源: Understanding Ethereum

Solidity - Solidity 是一种编程语言,用户可以用它在以太坊区块链中编写智能合约以及创建去中心化应用。

重要的是,Solidity 是图灵完备的编程语言,这基本意味着 “任何你可以编写成代码的东西都可以用 Solidity 写”。这说明,开发者能够使用 Solidity 在以太坊上开发大量的酷炫玩意。

可组合性 - 由于智能合约作为开源代码部署在以太坊上,所以,任何人都可以基于这些智能合约构建(或者 “分叉” 代码并自行改变),这表明以太坊 (以及其他类似区块链) 上的应用是可组合的。

可以将可组合性看作是区块链的 API 。尽管按理说早几代前开发者就能够基于其他技术基础设施创建应用,但加密可组合性对比其他领域的不同主要表现在:它所有底层协议都是去中心化的。

换言之,开发者无需担忧会有某个中心化实体,掌控全部的底层数据并突然改变平台的规则,或是限制开发者的访问, 比如 2018 年基于推特 API 构建应用的开发者们遇到的情况那样。

侧栏 - 可组合性的案例有哪些?在实际中如何应用?

可组合性指的是开发者可以利用已经构建和部署在公链上的其他应用创建新的应用。

例如,Compound 作为一个 DeFi 应用,如高能储蓄账户一样能让用户通过存款赚取利润。假设一个项目(例如 Argent 加密钱包)的开发者希望将 Compound 嵌入他们构建的应用中,那么他们无需重建系统就可以轻松地集成 Compound 。这就是可组合性。

image

来源: Understanding Ethereum

以太坊改进提案(EIP)- 鉴于如以太坊这类区块链在本质上是公开的、去中心化和开源的,其开发者社区修改协议的方式与中心化实体做决策的方式相去甚远。现代开源社区(比如 Linux 和 Python 的活跃社区)和以太坊的开发过程更加相似。

以太坊社区已经制定了一套流程以概述社区成员该如何向以太坊协议提出改进建议。这些流程包括提供进行讨论的公共论坛和鼓励社区参与开源,这对于以太坊区块链来说尤为重要,因为它是去中心化的区块链且依赖于全球分布的社区对其进行监督和改进。

提案可以与区块链遵循的核心规则相关 (比如何时达成共识),也可以就以太坊核心构建部件提议一个标准化版本如非同质化代币或者钱包(下文会展开描述)。当用户利用以太坊的可组合性并基于某些已标准化的规范来构建一个应用时,显而易见代码将按预期运行。

以太坊注释请求(ERC)- ERC 是 EIP 的一种类别,具体来说,ERC 是描述 “应用级别的标准和协定” 的一种 EIP 。

这类 EIP 值得在这提一提,因为它是以太坊上最重要且最具知名度的一些使用案例的合约标准的模板。开发者在以太坊上构建时可以使用这些合约标准以节约时间和精力,而不用从头开始。一些广为人知的 ERC 如下:

ERC - 20 :这是同质化代币的一种代币标准。

ERC - 721 :这是非同质化代币的一种代币标准。

ERC - 1155 :这是优化了部分 ERC - 20 和 ERC - 721 的代币标准,一般应用于碎片化非同质化代币。

侧栏 - 为何要分解(或使其可替代)非同质化代币?

尽管碎片化 NFT 这个概念本身听起来像悖论,但这也有几个不同的用例。

最好的解读方式是,一些艺术品价格高昂(比如 Beeple 的 NFT 以 6900 万美元的价格售出或蒙娜丽莎这副名画),普通人很难买得起。碎片化一个昂贵的 NFT,使得消费者有机会持有(价值连城、非同质化)代币的一小部分。

图片 来源: Algorand

值得注意的是,大多数分解后的 NFT 碎片之间具有可替代性,因此,某个用户持有的蒙娜丽莎面部碎片不会和手部碎片或是背景碎片相斥(即碎片之间是等价的)。

这些不同部位的碎片实际上并不是可替代的(比起脸部碎片,我更乐意花更少的钱购买背景碎片)而现实中,用户只会持有整个艺术品的一片小小的可替代碎片。

碎片化 NFT 不止是钱的问题。NFT 代表着独一无二的数字资产,所以 NFT 碎片化还隐含着所有权、身份和社区的概念。

测试网 - 测试网是区块链的副本,它使开发者得以尽情开发,并测试代码在 “主网” 区块链上将是何种运行情况。

当开发者在区块链上部署了智能合约后,尽管有些智能合约已经不再应用,但只要区块链一直活跃,这些代码都是可见的。

由于存在这种永久性以及智能合约有可能与大额资金交互,开发者会希望通过在测试网测试以确保代码会按预期运行。

在以太坊案例中,有一堆的测试网(比如 Rinkby 、 Ropsten 和 Kovan )可供开发者在不用冒险动用真实资产的情况下,测试自己的代码。测试网是加密软件开发者的开发实践环境。

水龙头 - 水龙头会分发 “虚假的” ETH 给开发者,所以他们能用这些测试币在测试网测试智能合约。

开发者需要 ETH 部署智能合约并与之进行交互,但与主网的 ETH 不同,测试网的测试币不具有实际的经济价值。水龙头是开发者获取 ETH 测试币的简便渠道。

设想你是一名开发者,准备在以太坊上部署智能合约。假设你手头上的智能合约将处理一些资金,可能类似于一个去中心化的交易所(在下文的去中心化金融部分有探讨)。

首先,你想在测试网上测试智能合约。以确保代码的运行达到预期。你将需要一些测试网的 ETH 来运行智能合约。

然而,要谨记测试网只是以太坊区块链的副本,所以测试网上面的 ETH 本质上是 “虚假的”,因此,这些代币不能兑换成主网链的 ETH 。

如果读者想用以太币测试合约并观察它的实际运行,那么水龙头可以方便用户获取 ETH ,并在测试网上尽情使用 / 挥霍。

预言机 - 根据需要,预言机可以用来连接区块链和外部系统。在某些时候,可以创建在以太坊上的应用,希望与非以太坊网络所保护的外部数据流进行交互。一些数据不得不从链下获取,就如今天的天气或者篮球比赛的分数。

因此,预言机是通向 “现实世界” 的接口。

为了农作物的保险起见,预言机可用于查询弗洛里达州靠近橙子种植地的天气,或是用于验证去中心化体育博彩应用的记分。预言机具有潜在的信任隐患(因为构成区块链的计算机网络无法真的验证弗洛里达的天气如何),但是对于这些需要预言机的应用来说,有良好的方案可以解决这一隐患。

预言机提供商 (如 Chainlink) 构建了某种系统以试图确保其预言机不易受攻击 (但是单个预言机仍然是区块链上易受攻击的弱点)。

读者可以设想一下:为预言机系统 (由多个预言机组成) 建立一种共识机制,尽管其中存在易攻击点 (因为链下数据总是可能会以某种方式被操纵),但是仍然

需要 9/16 个预言机对预言机网络的信息达成共识。或者类似的机制。

内存池 - 当一笔交易已被用户提交,但是还未被验证和打包上链,这种待处理的交易会被发送到一个等待区域,叫做内存池。

在处理交易之前,网络中的计算机节点会验证交易的有效性。举例来说,账户在发送交易时,可能会花费超过账户内的有效资金,或是可能出现私钥与发起方钱包(更多请看下文的钱包和身份认证的部分)的公钥不匹配的情况。当网络中的计算机在验证这些潜在隐患时,这些待处理的交易就在内存池中等待。

在技术上而言,网络中的每个参与者都有自己的内存池,但为了让入门级别的读者更好理解,把内存池想象成所有区块链交易的等待区域是可以接受的。

通常,交易在内存池中等待几秒钟到几分钟不等,这取决于需求量(下文进一步讨论可扩展性)。

以太坊上待处理的交易可以在数据供应器上看到,比如 Etherscan 。

侧栏 - 用户和应用如何与以太坊交互?

用户几乎都是通过如 Chrome 等浏览器使用网页应用。这些网页应用使用特定的库(如 web3.js 或者 ethers.js )建成,这些库使得网页应用可以直接同区块链节点实现交互

image

来源: Understanding Ethereum

开发者建立的应用,通过节点运行客户端软件的方式与以太坊进行交互。在下面的示例中,运行的客户端是 Geth ,它是一个用来与以太坊区块链交互的命令行界面。

也有像 Infura 这样 “节点即服务” 的供应商,它让开发者得以便捷地与服务供应商控制的节点进行交互,这和开发者如何利用 AWS 访问服务器空间的过程是类似的。接下来,这些节点可以在以太坊上与智能合约和单个账户余额产生交互。

这和当下其他软件产品的 “后端” VS. “ 前端 ” 大不相同。在左下图表中,我们可以看到一个用户如何连接传统的网页应用。

在这个图的旁边,是一个基于以太坊的应用的架构例子。两者极其类似!区别就是,以太坊作为一个后端基础设施服务于加密应用,这使得它具有全球化、无需许可和抗审核的特性。

image

来源: The Architecture of a Web3.0 Application

以太坊 301 - 钱包和身份

根据设计,区块链使得用户能够自我保管资产,但钱包的作用不仅是给了用户自我托管的权利,它还是用户在加密世界的自我呈现。

在这一部分,我将介绍 DAO 和身份的关系,以及用户如何保证钱包安全问题。

钱包 - 将你的资产存在加密钱包中,就好比将现金存在物理钱包里。但是这些加密钱包还储存着代表你和你的行为的信息,例如你交互过的应用以及用该钱包做过的交易。

需要记住的是,根据设计,区块链交易是公开透明的,由此,当你使用钱包在以太坊上做些什么的时候,你的钱包管理着关于这些交易的可追溯、公开的数据。

这些可追溯数据强调了 web3 中 “持有自己的数据” 的理念 —— 你的资产、交易历史、与去中心化应用交互的数据会随着你的钱包移动。而且,与物理钱包相区别的是,许多加密用户会使用多个用途不同的加密钱包。

在这里,还需要了解其他的定义才能完整地解释钱包的概念:

公钥 - 这是一行长代码,代表钱包的对外地址。公钥好比你的家庭地址;这个地址是独一无二,不是秘密(公共记录等)。而这个地址对应着一个家庭(或在这个案例中,地址对应着你的一个账户)。

你可能会与想给你寄信或礼物的朋友分享你的地址,但就算有人在当地政府的财产记录中看到你的家庭地址,那也没什么。如果有人看到你的公钥,那也是没问题的。

私钥 - 在另一方面,私钥是钱包的密码,所以不能让别人知道你的私钥。私钥会对应特定钱包的公钥,因此,如果有人得到了私钥,他们可以完全访问钱包。

私钥就像家里的钥匙,你并不介意有人随机知道了你家的地址,但是如果他们有你家的钥匙,那你必然惴惴不安。

再次重申 —— 任何人得到了私钥都可以接入对应的钱包,不要将私钥告诉任何人,也不要储存在别人可以找到的地方。

侧栏 - 公钥和私钥的原理是?

公钥和私钥背后的机制是非常重要的基础知识。基本上,公钥和私钥是用于加密和验证身份的一种方法,叫做私钥密码学。

谨记公钥是面向外部公开的。当用户向其朋友的钱包发起交易时(使用朋友的公钥),就相当于给交易上锁,只有当用户的朋友确实持有接收方钱包的私钥时,才能把锁解开。尽管交易是可见的(因为它存在公链上),但没有特定私钥(私钥对应的持有资产的钱包)的情况下无法 “解锁” 这些资产。

不管你是以太坊上搭建项目的开发者或者只是用户,一定要了解公钥和私钥的区别,这很重要。误用(或者 “放错”)公私钥可能造成严重的资金后果,并且,这和忘记中心化网站上的密码不同,应用开发者无法帮助用户恢复密钥。

随着更多用户创建加密钱包并在区块链上交易,这种交易模式将会更为标准化。同时,注意学习曲线以及帮助向其他用户解释也尤为重要。

image

来源: How to Generate Public and Private Keys

助记词 - 一组助记词(通常是 12 到 24 个随机的词)是钱包在紧急情况下最终的钱包恢复工具。它需要像私钥一样被同等保护起来,因为丢失助记词或者将它保存在会被发现的地方,就意味着钱包的一切都暴露了。

用户一定要采取合适的方式保存助记词,保证其安全性和机密性。

钱包应用的开发者无法访问助记词,所以,如果读者丢失了自己的密钥和助记词,那么你的钱包就不能再恢复。如果仅仅丢失了私钥,那还可以用助记词来恢复钱包。

托管钱包 - 这类钱包由托管方(任何负责管理钱包资金的中心化实体)负责管理,比如一个常规的 Coinbase 账户就是托管的。这些托管者负责管理钱包(因此,如果用户使用了一个托管钱包,就不必保管自己私钥)中的基本资产,为提供用户更为中心化、更顺畅的用户体验。

这种用户体验通常不包括加密原生的身份认证机制,例如,一位用户可以使用 Google 邮箱地址和密码登录 Coinbase 的账户。

托管钱包是一种开启加密之旅的好方式,同时也是兑换现金资产为加密货币的实用方法。另一方面,鉴于这些托管者都由中心化机构持有和管理,所以也带来了去中心化旨在解决的一些问题,比如数据所有权、信息流控制以及潜在的监管要求。

加密界有句关于托管钱包流行语 ——“无钥即无币”。

即便是 Coinbase 的 CEO Brian Armstrong 曾经也提过非托管钱包的重要性,因为托管钱包的提供商会有受到政府监管的风险。对那些倾向于以一种完全去中心化的方式管理自己的资产和交易的用户来说,非托管钱包是更好的选择。

非托管钱包 - 这类钱包的管理者只是...... 你!软件供应商(如 MetaMask, Argent 和 Rainbow 等)提供用户访问自己钱包的软件,但主要的是,钱包资产存放在链上而不是钱包提供商那里。

因此,如果 MetaMask 钱包发生了些什么导致无法访问,那么用户可以跳转到 Rainbow 钱包,导入他们的钱包(不用得到 MetaMask 的允许)并通过 Rainbow 操作自己的资产。

还有一种非托管硬件钱包,它的私钥直接保存在物理设备中(通常是看起来像 USB 的小金属物件)。

非托管钱包的使用伴随着管理公钥、私钥和助记词的负担,但这种钱包给予用户以自治权(直接持有资产)和访问以太坊世界的唯一身份。

以太坊应用允许用户 “使用以太坊登录”(Sign in with Ethereum, SIWE),即 “ 使用自己的非托管钱包登录 ”。由此,非托管钱包代表了用户的身份,这些钱包扩展了加密界的设计空间,比如关于身份、凭证和所有权的新思维方式。

社会恢复钱包 - 这是由一些非托管钱包提供商支持的一种钱包恢复策略。

这种钱包不需要助记词(有用户丢失过助记词),用户可以委任其社交网络中的其他人,验证钱包是否是否对应于它应该对应的人。通过社交恢复钱包,用户可以基于其社交圈的信任网络作为其非托管钱包的后盾,同时仍然保留非托管钱包的自我托管 / 去中心化 / 单点登录的优势。

Argent 是社会恢复钱包的一个用例。

侧栏 - 用户如何注意钱包的使用安全?

我不打算在这一栏目用图表,因把全部有关钱包安全的必要信息放进单个图表并不现实。在加密界中,钱包的安全性至关重要,值得我们耗费一些时间探索资金管理的最佳操作。

@Punk6529 发布了一篇很棒的推特长文,涵盖了安全使用钱包需要注意的所有信息。

Vitalik 就此写过大幅的篇章论述社会社交恢复钱包的重要性(点击此处阅读中文版)。而这里是来自硬件钱包供应商 Ledger 关于钱包安全的更多信息。

这里是 @Punk6529 长推文中的一些亮点,不过我强烈建议读者自行上推特阅读这篇推文:

“与公钥不同,永远不要将私钥透露给任何人。如果有人获取了你的私钥,那就玩完了。”

“地址 / 公钥:你的邮箱地址(可以共享)

私钥:收件箱的密码(永不共享)

钱包:保存私钥

助记词:私钥恢复系统(永不共享)

密码 (可选项):创建新钱包的额外密码(永不丢失)

安全性和弹性是相悖的目标:将私钥打印在宣传单的行为极具弹性,但你的 NFT 将会不翼而飞 (私钥泄露了)。你可以通过摧毁私钥的方式轻松解决安全性问题,而后果是,你本人也无法访问自己的 NFT 。平衡安全性和弹性这两个目标是门艺术。

以太坊域名服务(ENS)- 以太坊域名服务是为以太坊区块链而生的开源域名系统,某种程度上类似于传统网站的域名提供商。

ENS 将以太坊上的地址映射为人类可读的名字,因此我才能使用譬如 “brunny.eth” 作为我的地址,而不是这一长串的公钥:0xF67cAEbBbE7b630d137d2901637C02899ED3211b。

读者可以在自己的加密钱包(托管的或者非托管的)里直接尝试一下:创建一笔发送少量 ETH 的小额交易,不要用我的公钥,而是把 “brunny.eth” 作为接受者。这个服务会匹配 “ brunny.eth ” 和对应的钱包地址。

总的来说,作为公共物品,ENS 域名对以太坊生态系统中的身份而言十分重要,因而它们值得有自己版本的域名系统。

去中心化自治组织(DAOs)- DAO 是加密原生的组织形式。它可以是基于加密原生规则进行自我管理与组织的公司、非营利机构、社会团体或是其他任何类型的组织。

这里的加密原生规则是指类似于社区所有权、透明性和去中心化等概念,而值得注意的是,去中心化有一个光谱,而不是非开即关的两种极端。

不似传统公司在实体创建和领导组织架构方面的中心化持有和管理,DAO 则为无中心实体下决策的加密原生项目和商业的经营而设计架构,并致力于争取项目的社区所有权。

许多 DAO 的另一个愿景是完全去中心化和民主化的实现。也就是,DAO 的各种决策由主要参与者以民主的方式票选得出。

DAO 不仅能针对链上的应用级别产品的变动进行投票,还能发挥奖励和激励系统参与者的作用。

一部分 DAO 确实十分接近自治的程度,某种意义上,自动执行的智能合约代码运行着 DAO 的许多函数。

这方面的一个例子就是 DeFi 中的 DAO,这种 DAO 的核心价值定位是,对于 DeFi 中服务于某些目的智能合约的去中心化维护。大多数 DAO 向着去中心化的方向逐步发展,这其中的大部分更类似于与银行账户的多人聊天,而不是真正意义上的自治化组织。

DAO 实际上是各种事物的社会副产品,包括无需许可区块链、非托管钱包、身份认证工具(如 ENS 等)以及生态参与者的共享意愿。

DAO 值得用专门的一部分展开描述(甚至是用整篇指南!),但我个人观点是,大家在加密界中参加的 DAO 正是重新定义数字原生身份的关键,所以在本章节中与 “身份” 一起谈 DAO 最说得通。

  1. 1. 狭义 DAC

前面所述的 DAC 是一个较为宽泛的概念。但是作为一个严格意义上的 DAC 首先需要完全意义的去中心化。这体现在不依赖于中心化的服务器,不依赖于中心化的中央领导机构,甚至不依赖于中心化的域名。

对于狭义 DAC,首先整套系统以及行为准则必须是彻底公开透明的,如果他是以软件或者网络系统的形式出现,那么必须是彻底开放源代码的。每一个参与的节点都有权利了解系统运行的每一个细节、每一行代码。

其次,起着中心化作用的服务器必须将其计算和存储功能去中心化,通过分布式的方案,将计算能力和存储能力通过公平和开放的原则,部署在每一个参与系统的节点当中。每一个节点都可以参与到整个系统的计算和存储运算当中,根据自身所拥有的能力来提供服务,而整个系统会根据节点贡献能力的大小提供相应的回馈。这种回馈很可能是一种系统股份的奖励。根据系统,通常将这种节点为系统提供服务的行为称为挖矿(Mining),而将提供挖矿行为的节点称为矿工(Miner)。

  1. 1. 狭义 DAC

前面所述的 DAC 是一个较为宽泛的概念。但是作为一个严格意义上的 DAC 首先需要完全意义的去中心化。这体现在不依赖于中心化的服务器,不依赖于中心化的中央领导机构,甚至不依赖于中心化的域名。

对于狭义 DAC,首先整套系统以及行为准则必须是彻底公开透明的,如果他是以软件或者网络系统的形式出现,那么必须是彻底开放源代码的。每一个参与的节点都有权利了解系统运行的每一个细节、每一行代码。

其次,起着中心化作用的服务器必须将其计算和存储功能去中心化,通过分布式的方案,将计算能力和存储能力通过公平和开放的原则,部署在每一个参与系统的节点当中。每一个节点都可以参与到整个系统的计算和存储运算当中,根据自身所拥有的能力来提供服务,而整个系统会根据节点贡献能力的大小提供相应的回馈。这种回馈很可能是一种系统股份的奖励。根据系统,通常将这种节点为系统提供服务的行为称为挖矿(Mining),而将提供挖矿行为的节点称为矿工(Miner)。

而作为整个系统的开发者和领导者,其在系统中所处的位置必须和系统中参与的其他人(节点)是平等的,并不具备任何的特权。无论是项目领导者还是开发者,他们和参与系统的其他人仅仅是分工不同,并且需要对社区内的质疑声做出回应。而一旦有超过 51%(这一比例并非固定,可根据 DAC 的最初条款进行修改)的节点反对其行为,则可以将其罢免并推举新的领导人员。而其余的人必须遵守这些决定,或者自主离开 DAC。理论上如果 DAC 出现巨大的对抗,而双方意见无法调和,则可以分裂成两个 DAC 独立发展。

对于严格意义上的 DAC,在整个系统中不应该存在任何中心化的重要事物,如域名、版权等任何公司资产。即这些东西不能属于系统的某个人或者某一些人,如果有,则必须将其去中心化。如果不能将其去中心化,则必须舍弃。

也许有些人觉得狭义的 DAC 有些苛刻,但是如果不能够做到彻底去中心化,就不能把整个环节中的人为因素降到最低。类似 Bitcoin、BitShares 都是符合狭义 DAC 的概念。

  1. 1. 广义 DAC

从大的范围来看,有很多传统中心化的组织或者系统也有机会改造成 DAC,或者某些组织系统因为部分原因不能彻底做到完全去中心化,但是仍旧不妨碍它们成为一个 DAC。比如有些网站,因为域名本身就是一个中心化的事物,到目前为止,在客观上我们还不能将所有的域名都去中心化,但是在保留部分中心化的资产的前提下还是可以成为一个广义上的 DAC。

但是即使作为广义上的 DAC,最基本的原则仍旧是系统内所有的行为准则公开,还有节点内的民主与公平。这些规则将包括整个系统的目标、运营机制、利益分配机制、节点服务(挖矿)机制和投票机制。毫无疑问,系统中一切规则和准则的公开透明必须是所有 DAC 的底线,而且所有的细节必须是明确且可以量化,含糊不清或者无法量化的细则对于系统是毫无帮助的。

节点中的民主和公平也是 DAC 不可以突破的底线。在广义 DAC 中,这个民主和公平是相对而言的。由于一些无法改变的客观原因,可以允许一定程度的资产和权利不平等,如某个服务器和域名归属于系统中的某个人,但是这个不平等程度必须在系统可控范围以内。如果系统中参与的某一个人(节点)或者某一群人(节点)相对于其他人(节点)有着更多不可转让的权利,这个系统将不能称为 DAC。这个不可转让是指在系统通过全体一致投票后,即使获得超过 51% 的投票数但仍旧有无法罢免的权利和资产的情况出现,这个组织将无法被认为是一个 DAC。

  1. 1. 小结

从以上的定义可以看出,广义 DAC 和狭义 DAC 主要是在民主和公平之间出于客观条件做出了一些让步。但是笔者认为,广义 DAC 是目前组织和系统在向狭义 DAC 转变过程中的过渡阶段,我们应该相信严格意义上的 DAC 才是今后我们追逐的目标。

(三)DAC 定律

科幻小说中阿西莫夫的机器人三定律非常著名。同样,对于和机器人机制十分相似的 DAC,参与定义 DAC 的 Stan Larimer 给我们的 DAC 也准备了三定律。

第一定律

一个 DAC 必须遵循自己发布的商业规则。

第二定律

除非违背第一定律,一个 DAC 只能在股东同意的时候改变规则。

第三定律

在不违背第一和第二定律的前提下,DAC 必须保护自己。

在具体实践 DAC 时,这三个定律应该被认真地放入 DAC 的系统准则中,并且能够让所有股东检验这三条定律是否得到了严格的制定。通过这三条定律,将可以监控系统中股东权益的保护以及其他的规则如何被更改,但它们自己永远不可以自主更改这些规则。

第一定律:诚信机制

靠多个 DAC 节点对每一个 DAC 节点的行为进行互相审查,来确保所有的规则能够被强制实施。而单个节点的无赖行为则会被集体简单封锁。即使是系统的制造者不遵守规则也是无效的,而有敌意的高压控制将会是无效的。

第二定律:不可侵蚀机制

能够确保在没有多数股东同意的情况下,对任何 DAC 规则(源代码)的更改都是不被执行的,没有集体一半以上的投票来同意采纳,对极少数节点的侵蚀也是不会成功的。

第三定律:自我保护

能够让整个系统采取更多的手段,以抵挡对 DAC 生存造成任何威胁的能力。前两个定律已经降低了引入坏的节点的可能。一个公开的系统或者是开源软件,能够通过上述手段来极大地防止因为引入不良节点而造成整个系统崩溃的可能。

然而一个更严重的危险是,对那些必须暴露于所有险恶环境的 DAC,以及那些不断受到严格监管的 DAC 开发者和系统内的人员及节点,有可能被采用很多方式,如关闭网站,通过法律加强监管,发布禁令,甚至是更加黑暗的方法监管和束缚,而这对于 DAC 来说往往可能会受到致命的伤害。如果要作为一个能够被信任的实体存在,DAC 最好的办法就是通过节点服务走向国际自治。

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.