15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > 小白也能懂的Web3技术入门指南

小白也能懂的Web3技术入门指南

时间:2023-05-31 04:54:02 | 来源:网站运营

时间:2023-05-31 04:54:02 来源:网站运营

小白也能懂的Web3技术入门指南:作者:城主 原文标题:《以最简明的方式创造新世界:关于以太坊,非技术的你值得了解的所有技术细节》




写在前面




一直酝酿著要写这样一篇文章。这是一篇写给非技术同学看的技术文。但本文企图做得比大多数科普文更深入一些:我们探讨以太坊的技术本质,希望让具有大眾计算机使用水平的同学对以太坊的技术框架有一个初步的明确概念。




如读者不是只想了解几个时髦的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费。对於特定操作gas费是个固定值,比如:相加两个数值需要消耗3gas,计算一个哈希值需要消耗30gas,发送一个交易请求需要消耗21000gas。




以太坊上用来购买gas的不是其他东西, 正是以太币。有趣的是,以太币购买gas费的「匯率」还是浮动的。




因此, 如果我们确信以太坊网络有运转下去的价值,那麼以太币就永远有价值,因為它对标了以太坊网络的运算资源。




為什麼以太坊上的运算设计為需要付费呢?




天下没有免费的午餐,使用者付费也算天经地义。不过, 这裡还有另外一层原因:以太坊是一个世界通用计算机,




而一个通用计算机的运算是可以进入死循环的。




如果个人计算机循环死锁了,那麼可以简单拔插头重来。但是以太坊网络可没有插头啊,怎麼避免以太坊的运作被恶意的循环死锁呢?




除了在底层设计上一再注意,最重要的就是引入gas费用, 每次运算操作都需要支付费用,这样,无论如何都会有费用花完的那一刻,死循环计算也就自然而然终止了。




gas是以太坊极其重要的组成部分。创建交易的用户需要表明他愿意為交易执行所付出的价格,防止网络中无意或者恶意的无限循环以及其他形式的计算资源浪费。




一个美妙的设计,不需要设置复杂的规则来约束,只需要谈谈利益。




人性就是趋利的,这也是某种人性的弱点。以太坊的设计反过来




利用了人性来保证系统的运转




。这个设计思路在整个以太坊系统设计里不止一次的体现。




人慾即天理, 以太坊真正实践了这句话。




钱包,远程客户端




Web3钱包是区块链网络用户每天都打交道的工具,它是事实上的Web3入口。




第一次接触Web3钱包的人,大机率都会顾名思义把它类比成微信支付钱包或者支付宝钱包, 即一个服务端支持的存著某种货币的系统。这是对Web3钱包的最大误解。




Web3钱包是一个本地化的区块链帐户管理工具,本地化意味著




它并不联网储存个人帐户数据




。以太坊上的所有活动都是通过自己的以太坊地址帐户向以太坊网络发送交易请求来驱动的。那谁来帮用户做这个事情呢,正是web3钱包软体。




比如,当用户打开了一个NFT交易市场 ,下单购买一个NFT时, 网页会调起瀏览器的MetaMask钱包插件。这个MetaMask插件里储存著用户的以太坊帐户地址私钥,MetaMask钱包帮助用户打包好交易请求数据,并和用户确认所需费用,然后把这个交易请求信息发到以太坊网络上以完成交易。




万一用户丢失了以太坊私钥怎麼办,答案是——凉拌。私钥是以一串助记词的方式呈现给用户的,如果这串助记词丢了,而本地储存密钥的钱包软体也不小心删除了,




对应的以太坊地址帐户就永远无法访问了。




那麼,是否有可能出现一个中心化的服务来託管用户密钥呢?




这样的好处是,用户还有机会通过传统的身份找回方式把自己的帐户密钥从伺服器恢復回来。从易用性上考虑这是可行的,也已经有一些Web3產品比如http://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本身的流通性,热度还是会持续的。




智能合约,DAO




智能合约是以太坊的精髓所在。支持用户自行发布可执行代码,智能合约机制让以太坊上的应用(所谓分布式应用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新世界。




这个理想国新世界构筑在严谨的数学理论和简明的逻辑结构之上。无数技术天才正在為这个理想国添砖加瓦。了解越多,则会越倾向於相信,这个网络将拥有一个非凡和长久的价值。

关键词:技术,入门,指南

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭