扫码打开虎嗅APP
本文来自微信公众号:元天空之城(ID:gh_a702b8d21cdf),作者:城主,原文标题:《以最简明的方式创造新世界:关于以太坊,非技术的你值得了解的所有技术细节》,题图来自:视觉中国
一直酝酿着要写这样一篇文章。这是一篇写给非技术同学看的技术文。但本文企图做得比大多数科普文更深入一些:我们探讨以太坊的技术本质,希望让具有大众计算机使用水平的同学对以太坊的技术框架有一个初步的明确概念。
如读者不是只想了解几个时髦的Web3词汇作为谈天的资本,而是准备投身拥抱Web3,那么无论本职工作是否做技术,能对以太坊的底层原理有本质性一些的理解,肯定不是坏事。
作者开始深入Web3和以太坊的时候,作为技术出身的人, 也深感这个世界众多基础概念的全新性。
当然,也见过一些才学过人的朋友,比如团队的产品经理帅哥,从零入门到成长为Web3区块链的专家完全无障碍,不仅做得一手好产品设计,还能冲在最前线替技术部门做技术难点攻关。
但这样的人实在太少了。对于大多数人,作者认为Web3的入门学习曲线可能是比较陡峭的。许多人或许还停留在知其然不知其所以然的阶段。
因此,萌生了这个想法,写一篇给所有非技术背景而需要真正理解Web3区块链的朋友们,把非技术背景的朋友们值得了解的技术知识点, 用一种能听得懂的方式讲出来。写这样的技术内容,还指望写得深入浅出不枯燥, 挑战真的很大。但如果它确实小小帮助了那些不做技术的朋友们更深入的理解了以太坊,本文目的就达到了。
以太坊是什么?
当然,已经有很多的文章讲以太坊,读者多少了解过的话,应知道以太坊是第二代区块链网络(有别于第一代比特币网络),以太坊的通用货币叫做以太币。在以太坊之上能运行以智能合约为基础的分布式应用(dapp)。
先看看百度百科上以太坊的词条:以太坊(英文Ethereum)是一个开源的有智能合约功能的公共区块链平台,通过其专用加密货币以太币(Ether,简称“ETH”)提供去中心化的以太虚拟机(Ethereum Virtual Machine)来处理点对点合约。
这个解释没问题。大家也都知道以太坊是一个公共区块链平台。
但如果从技术角度深入一点点去理解以太坊,以太坊的本质本质,可能会让读者有些意外:以太坊本质上是一个世界性的通用计算机。而基于它的全球分布式特性,它无疑是世界性的。
为什么说以太坊是计算机?
以太坊的缔造者们从一开始就希望把以太坊网络打造用于通用计算目的。这是一个非常美好的设想:使用分布式网络构建一个全世界人们都可以参与的通用计算系统。注意,和现在的主流互联网体系不同,以太坊分布式网络是统一的单一整体。在计算机科学上,我们说以太坊整体是一个图灵完备的状态机。
“图灵完备”这词太学究了,读者只需了解,这代表了可以进行通用计算的能力。这点以太坊和第一代比特币网络是完全不同的:比特币网络没有通用计算能力。
另外,所谓“状态机”又是什么呢?
这个更好理解,用个人计算机做类比:当计算机运转时,CPU从内存载入指令和数据进行运算,计算完毕后把中间运算结果保存在内存(更新“状态”),然后进行下一次的载入和计算。类似这种需要保存状态的逻辑机器就是状态机。
尽管上面的解释把计算机的运行方式做了特别简化的描述,但现在的计算机系统本质上就是一个“计算-保存状态-再计算”的所谓图灵完备状态机。
那么以太坊呢,说它是一个通用计算机,也就是说以太坊整体上也是一个“计算-保存状态-再计算”的逻辑机器。
只是和个人计算机把状态保存在机器的内存(进而记录在硬盘) 不同,以太坊的“状态”,记录在分布全球的数以万计的节点上。
以太坊的突破性创新在于,它把存储程序计算机这样的通用目的计算架构与去中心化区块链相结合,因此创建了一个分布式的单体状态世界计算机。
无论以太坊的程序运行在任何地方,都能够产生一致的状态,通过全体共识规则确保数据正确和安全。
以太坊的数据记录方式是在每个节点上都保存同一份信息。
也就是说,任意一个以太坊节点, 都记录着以太坊网络的全部信息。特别形象的,这样的节点叫做“全节点”。这意味着以太坊网络的全部状态信息都完整同步在每一个节点上。
只要不是所有的全节点同时被摧毁,以太坊就可以重生。这是多么强的生命力。
要装下以太坊整个网络的信息,全节点需要有多大呢,这个量级远比读者想象的要小得多:今天,以太坊全部区块信息的总大小是345GB。这个容量相对于今天个人计算机动则好几个TB的硬盘容量实在是小意思。
以太坊的总信息容量每天都在不断的增加,但速度不算特别快,因为在以太坊网络记录信息需要支付非常不菲的费用,这也是以太坊的重要特点:所有的运算操作和数据记录都是要花真金白银的。
前面提到,“图灵完备”这个词描述了以太坊系统的通用计算特性。以太坊可以跑用户定义的通用代码,这些代码就是所谓的智能合约,这是以太坊区别于第一代比特币网络的根本创新。
正由于智能合约的支持,以太坊可以完成个人计算机所能完成的通用计算任务,从计算机科学理论看,以太坊就是通用计算机,也就是那种“计算-记录状态-再计算”的状态机。
既然说以太坊是“状态机”,不妨继续问两个问题:什么时候以太坊的状态会更新呢? 以太坊是不是像《终结者》里的天网那样自动运行呢?
答案或许又让读者意外了。以太坊虽然是世界计算机,全节点遍天下,但它的运行机制是彻底不并行的。以太坊是一个不折不扣的单线程系统。也就是说,以太坊计算机先把一个任务计算完毕,然后计算结果“状态”更新到全世界各个节点,它才会再继续下一个任务。
以太坊用户可以并发(Concurrency)的提交交易申请, 但以太坊不是并行(Parallelism)处理的。所有交易都试图改变整个全局状态,以太坊选择逐个处理交易。
读者也许听说过以太坊网络上越来越严重的拥堵排队问题,现在可以理解了:这是以太坊的单线程任务处理机制的锅。在以太坊上执行的任务,只能乖乖排队按顺序来,用的人多了不堵才怪。
如何解决以太坊的拥堵问题,是当今区块链技术研究的一个热点。比如大家可能听过的Layer2/侧链等新词,主要目的都是为了规避以太坊的主链拥堵问题(以及高昂的运行费用)。
回头来看,从任务的执行机制角度,以太坊可比读者手头正在用的个人计算机甚至手机系统都简单多了。
现在的个人计算机系统都是各种实时多任务,各种后台前台程序并发运行;以太坊除了信息状态同时存于分布世界的各节点,在系统运行方式上,反而是特别简单的单线程模式。
另外,以太坊底层有一个持续运作的所谓操作系统吗,这个世界计算机是不是有点类似《终结者》里的天网那样自动和智能化呢? 或者,至少有个类似计算机的操作系统来控制整体运行?
答案是:非也。
以太坊上完全没有“背后自动运行”这种说法。以太坊的所有计算任务都以“交易”来驱动,交易由用户持有的以太坊地址账户发起,只有成功和不成功两种结果。交易成功, 则在以太坊记录全局状态更新; 交易不成功, 则全局状态保持不变。
值得再重复一下, 以太坊是一个全局的单体状态机,交易是唯一能够让这台状态机向前推进并改变状态的东西。以太坊上的智能合约代码不会自动运行。以太坊也不会在“后台”运行。所有这一切,都是由用户交易触发的。
所以, 尽管同为通用计算机,但以太坊的运行模式和个人计算机系统是很不同的。
至于以太坊计算机是否有神秘的人工智能, 甚至有没有“天网”的雏形, 读者也可以直接回答了:以太坊没有任何自动运行机制,更不说人工智能;它不是天网,只是一个很好的分布式平台。从任务执行的底层机制来看,它恐怕比你桌面上的笔记本电脑还要简单很多。
去中心化的本质和基础
我们总说,以太坊为代表的Web3网络是去中心化的网络。那么什么是去中心化?为什么能去中心化?谁来保证去中心化交易的可信和安全呢?
所谓中心化,在当前的互联网模式意义上,是指在互联网上进行的用户之间的互动,都基于一个可信的公司维护的互联网服务。从技术上,就是典型的服务器-客户端模式。
比如一个看似简单的点对点转账:用户A通过手机微信或支付宝给另外一个用户B当面扫码转账100块。实际上,需要A和B都信任的腾讯或蚂蚁金服的后台服务器来操作双方账户,服务器把用户A的账户金额减少100块,把用户B的账户金额增加100块,并确保这两个操作一起发生。因为微信支付或者支付宝已经有足够广泛的使用,用户“信任”它们的后台服务器不会出差错。
我们能看到,当前互联网模式下,互联网服务的特点是:
服务由特定的公司运营。如果服务器宕机,用户服务就可能中断。当然,无数工程师呕心沥血确保了各种互联网中心化服务的稳定性。
基于这些服务,用户之间的交互,即使看起来是完全个人对个人的,都通过一个中心服务器完成。这背后的底层逻辑是,用户“信任”这些公司服务器是公正的,它们按照所承诺的方式服务用户。
这也是当前大公司提供的互联网服务看起来比小公司更“可靠”更有“信誉”的原因。因为大公司当前的用户体量,服务的技术和运营能力更可能赢得用户“信任”。
所以,在本质上,当前的互联网应用模式,是提供服务的公司做了保证, 使用服务的用户选择了相信。
那“去中心化”是什么?最基本的一点,就是没有中心化服务器。
以太坊上并没有一个架设在众生(众节点)之上的总服务器, 也没有任何提供特定服务的服务器。或者说, 以太坊上,并没有面向特定应用的服务器的概念。只有完全平等的“全节点”,每一个都保存着全网络的信息状态。
在以太坊上,任何用户都可以直接发起和另一个用户的交易,这个交易的合法性和正确性不需要一个大公司服务器来保证;而也正是因为用户互动可以彻底的点对点化,Web3用户再也无需把自己的账户信息交由某个大公司保管以完成服务。
用户的账户信息完全在自己手中,当用户A和B发生了交易比如以太币转账,这个操作由以太坊网络整体确保正确完成。
前面说过, 以太坊网络本质上是一个通用计算机;用户发起的交易,是唯一驱动这个世界计算机产生“状态变化”的机制。但前面也说过,以太坊并没有超越的人工智能;或更明确的,在以太坊上没有任何掌控全局的程序来担任互联网的服务器仲裁者的角色。
那么,问题来了:没有人或AI去监管,又做到了交易的完全可信赖性。这么妙不可言的事情,究竟是怎么实现的呢?
答案是, 依靠的不是“信任”,更不是魔法,而是一种基础和绝对可信的科学——数学。以下用一种简单的解释来讲一下,数学如何从最底层支持了这个美妙的去中心化系统。
有一种很有趣的数学,叫做非对称密码学。
大家稍微记住几个名词:
公钥:一个大的数字,一般用一串16进制数来表示。
私钥:一个更大的数字,用一串更长的16进制数字来表示。
数字签名:是一种信息加工方式 ,把任意二进制信息通过"私钥"进行数学运算处理,得到了一个被称之为数字签名的字符串。
简单类比一下,可以把公钥看做是账户号码,号码对外公开;私钥是密码,只有用户自己知道。公钥和私钥一一配对。
一个奇妙的属性是,知道私钥,可以很简单推出公钥;但反过来不行,知道公钥,是无法推导出私钥的。这也是“非对称”的来源。
“非对称密码学” 这种美妙的数学理论保证了一个结果:任何一个拿到公钥和数字签名信息的人,都能通过标准的数学方法来确认,这个数字签名是这个公钥所对应的私钥加工或者说“签名”而成的;并且数学理论确保了,只有这个私钥才能得出这个数字签名结果。
所以,数学理论给我们保证了,这个带有数字签名的信息,确实是由拥有对应私钥的人“签名”发出来的, 其他人无法伪造。
但这和我们说的去中心化交易有什么关系呢?
在以太坊体系里,我们每个人的账户地址,是一个公钥。这不是比喻,而是字面意义上的。如果读者使用过以太坊相关软件, 都知道以太坊的账户是以十六进制地址来表示的, 这个地址不是别的,正是密码学意义上的公钥。
那么, 用户的私钥在哪里呢?
事实上, 每个第一次使用以太坊的人都会被Web3账户管理软件提示, 要记住一串助记词,并会被软件反复提醒,不要告知任何人助记词,更不要丢失助记词, 否则账户再也找不回来。这个助记词,就是私钥的某种映射;简单一点来理解,这一串助记词是私钥本身。
Web3的账户管理软件,也就是所谓的Web3“钱包”,正是替用户在本地储存管理私钥,以及帮用户生成经过私钥数字签名的交易请求发到以太坊,从而成为用户Web3网络的事实入口。
(这里还有个小细节,用过MetaMask等Web3钱包的读者会知道, 要额外设置一个密码进入钱包。但一定要注意,这个密码并不是以太坊的密码。以太坊账户没有密码,用户的私钥就是访问账户的唯一和最高凭证。这个密码仅仅用来保护在本地储存的以太坊账户私钥信息,甚至密码本身都不做联网储存同步:私钥信息本身不会同步到服务器,钱包密码就没有任何理由做线上同步了。钱包工具是一个本地化软件。)
当一个以太坊账户对另外一个账户发起交易时,这个交易请求的所有信息会被账户的私钥进行数字签名,签名信息连同交易请求数据本身以及账户地址(也就是公钥),被一起广播到以太坊上。
在以太坊上,这个发出来的交易请求并没有任何中心化的服务器来负责,大量收到广播请求的全节点会同时确认这个交易的合法性。
(这里又隐藏了一点点细节:只有那些希望获得系统奖励的全节点才会主动去验证用户交易合法性, 并以工作量赢得系统奖励的以太币——这正是所谓的“挖矿”。)
以太坊交易的验证方式正是用了前面介绍的密码校验机制:
发起者的账户地址信息是公钥,同时又有了声称从这个地址发起的交易请求信息和账户私钥对交易信息所做的数字签名。那么,任何一个全节点都可以通过公钥+数字签名的校验,来确认交易请求确实来自于这个以太坊账户。
也就是说,以太坊任何一个节点都可以非常笃定地确认一个交易不是被伪造的而是真实来自于账户拥有者。确认这一点后,每个以太坊全节点都可以愉快地按照交易请求去执行操作,并把新的状态结果记录在以太坊数据链上了。这就是以太坊区块链最核心的密码学通信机制。
这种建立在密码学理论上的可信赖通信机制,从根本上做到了无需中心服务器也能让任意两个账户完成交易。确实无需第三方的信任,所有操作都是点对点的;或者说,这个点对点交易的“可信任”,是由数学理论所支持的。
数学保证了,在以太坊上有人说给你一笔钱(发起一个交易),你能立刻判断,这是一个骗子,还是天上掉了个馅饼。
最后我们可以相信的,不是承诺,而是数学。
以太坊账户里放着什么?一句话回答,以太坊账户里基本没什么内容。
以太坊的账户有两种,一种是人用的,叫外部账户;一种是智能合约用的,叫合约账户。
“智能合约”这个词实在是显得高深莫测,但实际上所谓智能合约就是一段代码,而且在以太坊的机制下, 智能合约代码一般非常的短 ,数百行的智能合约就已经是庞然大物。
无论外部账户还是合约账户,在以太坊上都用一个地址来表示。对于外部账户,即人所用的账户,里面只有一个数据字段,那就是这个账户所拥有的以太币数额。而对于智能合约账户,数据稍多了一点点,除了以太币数额字段(没错,智能合约账户本身也独立拥有以太币) 还有数据字段储存智能合约的代码本身,以及这个智能合约所需的数据储存区。
除了以太币数额之外, 以太坊账户里还有一个内部计数, 叫做nonce, 这是账户交易次数的统计, 每次交易后递增加1。这个计数很重要, 用来防止“可重用攻击”。
简单的说,如果别有用心的人把这个账户曾经发出的交易数据复制一次再发出来,因为数据包里的公钥和签名都为真,若用户账户里没有这个单向递增的交易计数供校验,交易就有可能被重复执行多次。
以太坊账户的体系结构特别简洁, 正如以太坊区块链网络是由最简明的密码学通信连接起来一样。
智能合约的代码也很简洁,不过智能合约的强大之处还在于,整个以太坊的代码都可以“为我所用”:每个智能合约代码都可以自由调用另一个智能合约。
这特别类似搭乐高积木,每块积木看起来平淡无奇,但无数积木组合在一起,可以构建一个辉煌的大厦。
以太坊这样的架构让人想起了蚂蚁的社群组织。每一个蚂蚁所能做到的很有限,但整个蚁群在一起,仿佛就有了一个更高等级的智慧化存在。这存在不是人工智能意义上的,而是社会学意义上的。
以太坊的缔造者们一定是一群理想主义的人,只有这样的人,才会执着于构造出一个新世界,让这个世界基于最简明的规则来运作,却能自行衍生出复杂而强大的社会功能逻辑。
在深入了解以太坊的过程中,我们将一次又一次地感受到这一点。
前面多少涉及到了以太坊货币(简称“以太币”)概念,这里继续再掰掰清楚。
以太币现在的价值不菲,诚然,这个价值波动比较大,也有很多关于区块链币的价值真实性讨论。但作者可以判断,这个价值会波动,但以太币的价值存在不会消亡。原因有很多种,这里只讨论一个技术性和根本性的:以太坊币最基本的功能是用来做什么。
是的,以太币是以太坊生态上的通用货币,它现在可以购买很多虚拟物品,但以太币的内在价值,在技术层面上,是设计为以太坊网络的计算资源购买力。
这里需要谈到以太坊运作的一个核心概念,运作需要支付相应费用。
大家已经知道,在以太坊上,每个用户可以自由发起全网同步的运算即“交易”。只是,这个交易消耗全网络计算资源,对应的费用,由发起账户支付。
以太坊用一个单位gas(英文意思是汽油,特别形象)来衡量执行具体操作所要花费的计算和储存资源。
和当前互联网生态里用户基本免费的网络服务使用理念南辕北辙, 任何以太坊用户希望发起一次交易,都需要先支付对应的gas费。对于特定操作gas费是个固定值,比如:相加两个数值需要消耗3gas,计算一个哈希值需要消耗30gas,发送一个交易请求需要消耗21000gas。
以太坊上用来购买gas的不是其他东西, 正是以太币。有趣的是,以太币购买gas费的“汇率”还是浮动的。
因此, 如果我们确信以太坊网络有运转下去的价值,那么以太币就永远有价值,因为它对标了以太坊网络的运算资源。
为什么以太坊上的运算设计为需要付费呢?天下没有免费的午餐,使用者付费也算天经地义。不过, 这里还有另外一层原因:以太坊是一个世界通用计算机,而一个通用计算机的运算是可以进入死循环的。
如果个人计算机循环死锁了,那么可以简单拔插头重来。但是以太坊网络可没有插头啊,怎么避免以太坊的运作被恶意的循环死锁呢?
除了在底层设计上一再注意,最重要的就是引入gas费用, 每次运算操作都需要支付费用,这样,无论如何都会有费用花完的那一刻,死循环计算也就自然而然终止了。
gas是以太坊极其重要的组成部分。创建交易的用户需要表明他愿意为交易执行所付出的价格,防止网络中无意或者恶意的无限循环以及其他形式的计算资源浪费。
一个美妙的设计,不需要设置复杂的规则来约束,只需要谈谈利益。
人性就是趋利的,这也是某种人性的弱点。以太坊的设计反过来利用了人性来保证系统的运转。这个设计思路在整个以太坊系统设计里不止一次的体现。
人欲即天理, 以太坊真正实践了这句话。
Web3钱包是区块链网络用户每天都打交道的工具,它是事实上的Web3入口。
第一次接触Web3钱包的人,大概率都会顾名思义把它类比成微信支付钱包或者支付宝钱包, 即一个服务端支持的存着某种货币的系统。这是对Web3钱包的最大误解。
Web3钱包是一个本地化的区块链账户管理工具,本地化意味着它并不联网储存个人账户数据。以太坊上的所有活动都是通过自己的以太坊地址账户向以太坊网络发送交易请求来驱动的。那谁来帮用户做这个事情呢,正是web3钱包软件。
比如,当用户打开了一个NFT交易市场 ,下单购买一个NFT时, 网页会调起浏览器的MetaMask钱包插件。这个MetaMask插件里储存着用户的以太坊账户地址私钥,MetaMask钱包帮助用户打包好交易请求数据,并和用户确认所需费用,然后把这个交易请求信息发到以太坊网络上以完成交易。
万一用户丢失了以太坊私钥怎么办,答案是——凉拌。私钥是以一串助记词的方式呈现给用户的,如果这串助记词丢了,而本地储存密钥的钱包软件也不小心删除了,对应的以太坊地址账户就永远无法访问了。
那么,是否有可能出现一个中心化的服务来托管用户密钥呢?
这样的好处是,用户还有机会通过传统的身份找回方式把自己的账户密钥从服务器恢复回来。从易用性上考虑这是可行的,也已经有一些Web3产品比如MetaNotey.IO正在在做这个事情——向用户提供Web3账户的托管服务。
毕竟web3钱包也是有使用门槛的,托管之后用户的Web3学习曲线会更平滑; 另一方面,如果允许一个中心化服务器托管自己的Web3账户,则又回到了传统互联网的命题,失去了100%的隐私安全。隐私性和易用性很可能是无法同时100%被满足的。我们终有取舍。
此外, 类似MetaMask这样的账户管理工具有另外一个名称:远程客户端。
在以太坊这样的区块链网络上,所有的节点都是所谓的客户端(这名字也不尽准确,因为全节点也承载了对以太坊用户服务的功能)。各全节点在以太坊里的地位是平等的,都包含着整个以太坊的完整信息。
但是,很多用户并不想成为一个全节点, 而只想访问使用以太坊网络。于是就衍生出了远程客户端的概念。远程客户端不需要本地储存整个以太坊网络的信息, 它们对以太坊的信息都是通过访问其他全节点完成的。远程客户端负责把账户发起的交易向以太坊广播并接收结果。
MetaMask这样的Web3钱包,本质上是一个远程客户端。
“代币”是一个经常被提起的概念。代币是英文token的直接翻译, 指的是以太坊上用户可以通过智能合约自行发布的虚拟币。只要接口满足一个协议ERC20标准,任何智能合约都能成为某个代币的发行方。
为什么常说所谓发币是“空气币”和“割韭菜行为”呢?道理其实很简单,因为每个人都可以自由打造智能合约,去“发行”某种代币。
"发行"是个听起来很高级的词, 但在技术层面上,代币合约做的事情可以非常简单,就是几句代码声明某个数量的一种代币,并且通过标准的ERC20接口,把代币授予不同的以太坊账户。
前面说过,每个以太坊帐户都有一个字段记录着这个帐户的以太坊币数额。那么,这些授予的代币数额,是不是也记录在用户自己的以太坊帐户里呢?情理上貌似应该如此,但答案会出乎你的意料:并不是。
你的以太坊账户里唯一一种数额记录就是以太币数额。而各种各样的代币授予以太坊各账户的代币额度,只记载在创造了这个代币的智能合约的数据区里。
读者可以想象一下,在这个代币智能合约的数据储存区里有一个表格, 表格里的每一行都记录着“地址xxxxxx:拥有xx个代币”。代币合约以一个最直观的方式,把每个账户的代币额度记录在一个公开可见的表格里。
如果深究一下,这种甚至并不记录在个人账户里的代币数额,为什么能够得到公众认可呢?这也得益于以太坊的数据公开性和不可篡改性。
基于ERC20协议的代币合约代码公开,任何人都可以阅读验证;而代币的数据记录在技术上也是确定不可修改的。尽管数据只记录在了智能合约账户的数据区里,但数据公开可见且不可篡改,所以也无所谓。以太坊网络的数据特性再一次帮助全体用户认可了合约“发行”代币这个操作的有效性。
当然,这指的是技术意义上的有效性,而不是经济学意义上的。
讲到代币,则肯定要再提一下现在炙手可热的话题:NFT。NFT是 Non-Fungible Token(非同质化代币)的缩写。所以本质上,NFT也是一种代币。这句话背后的一个意思是,NFT也是由某智能合约创建和记录的“虚拟币”。
和上面所讨论的代币不同,每一个NFT代币都是不一样的,这个“不一样”在技术上的理解是,每个NFT都有自己独特的元数据(metadata),指向不同的虚拟物品(一张头像图片,一个游戏装备,等等)且协议上不支持分割。
所有的“同质化”代币,以及以太币都可以拆分成小于1的额度比如0.01个来交易。这也容易理解:在数据记录层面上,以太币和各种代币都只是某个数字额度, 这个额度可以支持小数点后的计数。
而NFT是不支持拆分的。值得提一下的是,有两种主要的NFT协议。一种是ERC721,主要用来生成单个NFT,这也是现在大多数NFT的生成协议;还有另一种NFT协议,是为了解决类似游戏物品的交易需求而生。
游戏内的虚拟物品, 很多是称斤论打的, 比如说一组20个药水,10个草药原材料……ERC721在支持这样成组的虚拟物品上有些吃力, 因为它所描述的NFT都是单个生成的。因此另外一个协议 ERC1155被提出来,用来支持这种不同品类批量生成NFT。
NFT除了名字和“代币”有关系,其他方面并没有多少关联。NFT的核心认知其实是“权证”,这个权证使用一串字符,或者更学究一点,一串哈希值来对应某个虚拟物品,比如一个头像图或者一个视频,甚至现实的物品比如一双袜子等等。这种对应关系由数学算法生成。
一个NFT质疑者常挑战的问题是:虚拟物品(更不用说现实世界的物品)的“所有权”如何和NFT元数据里的一串字符产生100%不可分割的关系?
这个问题并没有答案。
目前也没有任何国家法律来保证NFT所对应的物权。NFT的当前价值仍是基于所有人对于NFT的共识,以及公开交易市场上所呈现的真金白银上。作者私以为,支持Web3的人不会过多争论NFT的“价值”是什么,正如游戏玩家从来不会怀疑虚拟装备有没有价值一样。
价值本质是一种“群体共识”,只要足够多的人认可NFT作为“Web3时代的流通商品”的定位,只要特定NFT能和某种稀缺性的无形价值相关联,再加上NFT本身的流通性,热度还是会持续的。
智能合约是以太坊的精髓所在。支持用户自行发布可执行代码,智能合约机制让以太坊上的应用(所谓分布式应用dapp)蓬勃生长。
以当前互联网生态来对比智能合约,相同的地方是,所有用户都可以开发自己的应用并发布到网络(移动app V.S. 智能合约);前者发到应用商店,后者直接部署到智能合约账户里。
但有个很不同的地方是,智能合约代码是完全公开的,且具有相互调用的能力。这在当前封闭的移动互联网模式下是不能想象的。
以太坊智能合约的这种联动模式,有点类似AWS的发家史。最早的时候,亚马逊了打通全公司技术能力, 强制推行各后台技术团队以统一接口开发模块,并在公司范围内允许互相之间调用,这就是AWS云服务的雏形。
这是典型的积木式体系构建思路。而以太坊更进一步,因为代码的公开特性, 整个以太坊生态技术的迭代都以一种特别透明和合作的方式呈现在世人面前。
在技术上没有可以藏着掖着的地方, 需要了解别人怎么做就直接去看看对方的智能合约代码。在这种极致透明的设定下,一种全新的社区共创的技术文化正在欣欣向荣发展起来。
关于智能合约有个热点值得单提出来讲讲, 就是热门新潮概念DAO。DAO这个词很多人第一次听说是源于红杉在twitter发了一个推,要all in DAO。未来是不是属于DAO的,下定论还有点早,但DAO(去中心化自治组织)是一个有趣的概念, 虽然名字(又)有点绕,但其核心概念是容易理解的。
DAO把组织的管理和运营执行规则写进了智能合约代码,这个智能合约发行的代币很类似公司股票,不仅有经济价值,也有股权价值。所有拥有DAO合约代币的用户通过合约代码所约定的投票机制来决定一个执行结果, 这就是所谓基于智能合约的治理。
此外,智能合约账户本身也拥有着以太坊币额度,所以DAO智能合约完全可以看做一个有资金池和严格的投票治理制度的虚拟公司组织。这个组织的程序执行基于以太坊机制,确保没有人可以破坏既定的组织规则。
根据以太坊的特性, 智能合约一旦部署就不能更改,这意味着这个“智能合约”DAO公司的运营机制必须在部署之前完全确认。任何的代码疏漏都可能成为未来的问题。
这其实不是DAO的问题,而是以太坊网络所有智能合约所必须面对的挑战。
有趣的是,正因为有这样的“一次部署必须完全准确”的挑战, 以太坊上的智能合约代码都以一种特别简单明了的方式来构筑:既然越复杂的代码越容易出错,那不妨就尽可能简单些。
从现实利益出发,以太坊机引导了所有参与构建的开发者去遵循缔造者的思路:以最简明的方式创造新世界。如不遵循这样的设计思路,则要承担更高概率出错且无可挽回的风险。
用人性和利益而非教条来驱动社区共同遵循一个方向,我们又一次看到了这种天才的构思。
在了解以太坊的各种细节后,为什么还要聊共识机制? 因为这是以太坊的决策基础。
在一个没有中心化管理的分布式网络里,要让整个网络节点达成统一的意见,比如决定一个新的数据区块由谁生成,应该怎么办?
这就是“共识机制”发挥作用的地方。
在计算机科学里,“共识”这个术语比“区块链”出现得更早,它泛指了在各种分布式系统里的不同参与者对单个状态达成一致。
共识是以太坊的关键属性, 它之所以那么关键,是因为这个承载着真金白银的系统, 并没有某个人某个组织或者团队“掌控”;或者说,控制权分布在广泛的参与者之间。共识的终极目的是打造一个严格按照规则来运行且没有单一控制者的系统。
这简直是技术的理想国。
共识算法非常底层, 远比智能合约的抽象概念更加底层。对于读者来说,不一定要理解其工作原理才能使用以太坊,正如使用互联网也不需要理解路由原理一样。但简单了解共识这个机制顺便可以帮助读者进一步理解什么是“挖矿”,一个大家听得很多的概念。
最早区块链(比特币)的创造者发明了一种叫做工作量证明(Proof of Work,PoW)的共识算法,工作量证明的一个通俗表述就是“挖矿”。
挖矿多有被误解,很多人都以为挖矿的目的就是从系统获得新的区块链货币,但事实上,挖矿操作的本质目的是为了保证整个区块链系统的去中心化, 保证整个系统以一种共识机制来运行。而遵循这个机制“挖矿”得到的奖励则是区块链所铸造的货币。
这个机制有隐含的惩罚机制, 如果不遵循共识规则来得到区块奖励,则挖矿上花费的电力就有可能血本无归。这种实际利益驱动的规则遵循机制是各种共识算法的核心思想。
有意思的是, PoW工作量证明尽管比较容易理解(…真的吗?),但它不是历史上首个被提出的共识算法。在PoW出现之前,有人就提出基于抵押金的共识算法,就是所谓的权益证明(Proof of Stake,PoS)。
共识机制都通过系统的奖励和惩罚来让验证者遵守共识规则:PoW工作量证明的惩罚是外部的,花费电力做了无用功没有得到以太坊奖励,PoS权益证明的惩罚是区块链内在性的,即失去了质押的以太币。
很有意思,严谨的计算机科学又一次利用了人性,区块链分布式网络上最核心的需要全体维护的“共识规则”,其校验机制用人性来确保: 遵守者获益,违反者被惩罚。
从最初,以太坊的创始者就希望有一天以太坊的共识机制能切换到权益证明, 因为工作量证明有一些明显的缺点,比如浪费现实世界的能源。
所以,以太坊在创建之初埋下了一个“难度炸弹”机制,目的是迫使以太坊的PoW挖矿变得越来越难,最终不得不让网络转向PoS。而在本文发出之时,以太坊的PoW时代已是终章,以太坊正在过渡到它的PoS时代。
这个切换并不容易, 已经数次推迟。最新的消息是以太坊网络将在今年内正式切换到PoS模式, 到时候,以太坊的“挖矿”将不复存在。
以太坊上庞大的应用体量对底层架构的性能和可扩展性的要求越来越高,这也是以太坊下定决心向PoS机制过渡的重要原因。
无论矿工对现在的以太坊有多么留恋,以太坊网络将以不可逆的方式降下挖矿的帷幕。
如果读者还能坚持看到最后, 对以太坊这个Web3时代最重要的基础设施的技术概念应该有了一些初步的理解。
以太坊的技术构建,在每个细节上都闪耀着技术理想主义的光芒。以太坊的缔造者期望用一种简洁明了的方式, 构造一个所有用户都能平等参与,自由构建的Web3新世界。
这个理想国新世界构筑在严谨的数学理论和简明的逻辑结构之上。无数技术天才正在为这个理想国添砖加瓦。了解越多,则会越倾向于相信,这个网络将拥有一个非凡和长久的价值。
本文来自微信公众号:元天空之城(ID:gh_a702b8d21cdf),作者:城主