致正在一知半解的朋友:本文的知识,你如果自己去摸索,可能需要半年、一年甚至更长时间才能搞明白。本文尽可能让你在半小时内建立起靠谱的认知。
另:本文对区块链的举例主要是以太坊,有时会混用这两个词。请自行鉴别。
Q:Hi,兄弟,Web3现在很火,我在网上看了很多文章,总还是弄不明白什么是Web3,你给我讲讲呗。
你看不懂那些文章,是因为那些文章大多都是宣介性质的,他们并没有讲很基础的东西。
本质上,Web3是一个技术上的东西,需要一些技术性的解释。
如果你始终停留在表面,那你就始终抓不住实质。
Q:那么,老兄,Web3到底是个啥啊,我记得以前有Web3.0的,它们有关系吗?
现在(2022年)人们说的Web3,不再是前些年曾经被提出过的Web3.0。显然,自从Web2.0出来以后,很多技术都自称是Web3.0的,其中有一些不乏名人背书。
曾经比较流行的说法有:Web3.0是语义网;Web3.0是物联网;Web3.0是互联网+人工智能;Web3是互联网+虚拟现实等等,但由于没有任何一个获得实质性的成功,这些说法后来基本都隐退了。
这两年人们说的Web3.0,基本上就是指互联网+区块链+ DApp(去中心化应用)了,而且,可能是为了撇清和以前Web3.0的关系,现在的叫法基本就是Web3。(事实上,小版本号也没有什么用)
Q:我说呢,那这个Web3怎么感觉有点要火啊。
Web3和前面的Web1(网页展示)、Web2(用户贡献内容)的主要区别就是,用户对自己的数字资产有了安全感:
除非本人同意,自己的数据资产,任何人都拿不走、改不了。
而以前,对于用户的数据,大公司和政府是有控制权的。毕竟数据是在公司那里,理论上,他们想怎么改就怎么改,想怎么删就怎么删,用户是没有办法的。
而且,对于网站的霸王条款,用户往往是弱者,没有讨价还价的能力,网站利用你的创作吸引了客户和流量,而你却不能分享其中的利益,或者只能拿到微薄的回报。
从这点讲,Web3是有革命性的:
在Web3,公司不仅不再能控制你的数据,而且也不能控制你的收益。
如此有价值的东西,而且处于初期,你说人们能不兴奋吗。
Q:为什么会这样?网站难道不再能控制它的数据了?
因为最主要的数据,已经不在网站的数据库中了。
最主要的数据,在区块链上。
区块链的数据安全性,想必你是知道一点的,一是谁也改不了数据,二是没有私钥就转移不了资产。
而私钥只在你手里。(你自己要保管好啊,长点心眼!)
Q:网站为什么愿意把数据放在区块链上?存在自己数据库里它不香吗?
如果有两个提供同样功能的网站,一个是传统技术,一个提供可信的数据资产保护,还能让人们得到收益,你说人们会选择哪个?
这就是OpenSea.io会脱颖而出的原因。
Q:OpenSea是怎么做到这点的?
用户上传自己创作的图片,给它标价(list),或等待他人出价(offer)。
如果有人买,OpenSea收取成交价格的2.5%作为手续费。
图片作者,除了首次交易获利外,后续这个作品再被出售时(不管多少次),仍能每次抽成2.5%(这个值可以设置高达10%)。
OpenSea本身的业务逻辑,都写成智能合约放在区块链上,所以数据的安全性由区块链保护。
图片所有者的权益,由私钥保护。
而且,所有交易,都能在区块链上公开查询。
采用传统技术的网站,是做不到这些的。
OpenSea仍然会有业务逻辑漏洞或者网站技术漏洞,但区块链保护了最重要的东西。
Q:私钥长什么样子啊,给我看一眼?
0x96e716aac85c9bb67adcdff650379304cb2caf9df3cb88b39aedfd58da530db9
这个私钥仅仅是我临时生成的,不要把这个私钥导入你的钱包,因为它已经曝光了。
Q:私钥这么长?这怎么记啊
私钥一般是用钱包(比如MetaMask这样的)来管理的,你不用记。
关于私钥的备份或者恢复这类事情,有很多成熟方案和注意事项,这里就不讲了。
Q:就这些?这能让人兴奋吗?
什么事能让人兴奋?突如其来的巨大好处。
Web带来了什么好处?
一是DApp的所有底层数据都公开给大众,而且还能防篡改。
二是区块链自带激励机制,你不仅能保护数字资产,还能兑换token。
以前可没有这等好事,也就这几年才有。
Q:我不装了,我是搞技术的,我搞过开发,你能给我讲讲Web3在系统架构上和以前有什么不同吗?
你搞过开发,那么下图的左边你一看就明白是啥吧:
如果你懂以太坊,右边是不是也很好懂?
图片来源见参考文献1、2。
Q:哦,明白了,前台和以前没太大不同,后台变成以太坊了呗。
对,就像我前面说的,最核心的数据在以太坊。
Q:那什么是以太坊?你能给我讲讲以太坊技术吗?
我现在没时间,有空了给你讲。
关注我(“卫sir说”),也许哪天我会发出来。
Q:那我怎么调用以太坊的数据和代码呢,我从来没有写过这样的程序。
以太坊所谓的去中心化
,其实就是很多节点一起维护数据而已,上面不仅有数据,而且还有代码,代码也就是人们常说的智能合约。
每个节点都可以广播交易
请求,然后,其他节点会执行该交易,并将产生的数据变化(术语叫状态变化)记录在区块链上。
你的前台想与区块链互动,要求能发出交易,为了做到这点,要么你自己维护一个节点,要么你与其中一个节点互动。
一般人都懒得自己搭节点(费时费力费存储),所以大多使用第三方服务如Infura或Alchemy提供的节点服务,让这些服务帮助发出交易。
当然,这涉及到一个是否信任他们的问题,后面还会说到。
Q:那我怎么使用Infura这些服务呢?我可当过程序员的,你稍微详细说一说呗。
你去Infura或者Alchemy的网站,注册个账号,然后他们会给你个链接(provider
)让你用。
比如一个provider长这个样子:
https://etheruem-mainnet.infura.io/v3/491234567abced4456abcaabbcdee
(上面这个是我瞎编的,不要直接用它,自己申请一个)
然后你安装Web3.js
这种库(或者用Web3.py库,这种可以和区块链通信的库都可以被理解为Web3 API),和provider建立连接,做好交易包,发给这个连接就好了(本质上是个json-rpc调用)。
这个provider会把你的交易广播到以太坊上,并把结果返回给你。
Q:您说的是发送交易,那区块链上的数据我怎么读呢?
一样的,还是使用Web3的API,你可以读取区块和交易的具体数据。
你还可以对智能合约的Event进行监听(比如用Web3.js监听,并指定回调函数,一旦发生事件就可自动处理)。
此外,还有一种叫“The Graph”的API,程序员可以用GraphQL作为查询语言,方便快捷地查询区块链上的各类数据。The Graph会把各种数据都准备和索引好,你就不用自己费力去啃生肉(读原始数据并解析)了。
Q:啊啊,就这么简单啊,说的我都蠢蠢欲动了,我是不是应该开发个DApp了?
在足够简单的情况下,你可能开发一个页面就能实现一个DApp。
Q:那用户登录会不会有所不同?
你太聪明了,的确如此,你不再需要保存用户名和密码信息(除非你很想这么做),让他们用钱包登录就好了。
另外,钱包也具备provider功能,你可以不用去连Infura或者Alchemy,你让页面脚本直接连用户的钱包,让用户钱包和区块链通信。
不过,要知道,MetaMask背后用的也是Infura。
Q:什么是钱包?干什么用?长什么样子?
对于crypto
(加密技术、区块链爱好者)而言,钱包指的就是加密钱包,它帮你生成私钥,生成地址。
用户的私钥是保存在钱包里面的,所以进入钱包需要一个口令保护,否则别人接触你电脑就拿走私钥了。
一个DApp如果涉及改动数据,就需要调用用户的钱包,在用户的确认下,对交易做签名
,然后发出。
比如最流行的钱包MetaMask,长得是这个样子:
现在,你可以在脑海里建立这样的架构:
Q:还有一点,听说Web3喜欢把东西存在IPFS上,这是什么意思,为什么不是存在以太坊上?
以太坊上存东西很贵的,所以只存最重要的数据。
如果是图片、文档、音视频这种比较大的数据,现在很多还是使用传统技术存储。
当然,为了“去中心化”,可以把数据放在IPFS上。IPFS是一个去中心化的存储协议,使用、借鉴了BT(BitTorrent)、Git(版本管理)、DHT(分布式哈希表)等技术,可以说,在文件分布式存储方面,集合了一些最先进也是最好用的技术。
和Web1、Web2不一样的是,在IPFS网络上,文件的CID(hash)决定了它的URI(链接),也就是说,相同的文件有相同的链接。这和以前是完全不一样的,
比如BAYC之1号猿的IPFS地址为:ipfs://QmeSjSinHpPnmXmspMjwiXyN6zS4E9zccariGR3jxcaWtq/1
还有一个叫SWARM的,也是去中心化存储,和IPFS的关键技术是类似的,但又不太一样。由于是以太坊基金会主导的,所以也备受关注,这里就不多说了。
Q:你一直在说去中心化,为什么crypto都这么喜欢去中心化呢,这难道真的很好吗?
其实,提倡“去中心化”,就是对现行“中心化”互联网的一种不放心、不信任,就是对数据安全的极度关心。
中心化的架构下,用户的数据保存在公司那里,万一哪天它倒闭了怎么办?
比如你在一个绘图网站辛辛苦苦做了1000张图,结果突然某天网站说:“不好意思,数据丢失”,你怎么办?
比如你在一个视频APP上,辛辛苦苦上传了10000个视频,结果某天该公司说,不好意思,我们放弃此产品,你怎么办?
你只能认了。因为在用户服务协议上,公司对于数据丢失和停止服务,都安排得明明白白的。
比如,某著名APP在“用户协议”里是这么说的:
“您理解并同意,公司为了整体服务运营、平台运营安全的需要,有权视具体情况决定服务/功能的设置及其范围修改、中断、中止或终止本软件及相关服务。”
“您理解并同意,本软件及相关服务可能会受多种因素的影响或干扰,公司不保证软件及相关服务完全适合用户的使用要求;不保证软件及相关服务不受干扰,及时、安全、可靠或不出现错误;不保证软件及相关服务中任何错误都将能得到更正。”
这就是说,你在使用时,已经划勾同意了:公司随时可以中止服务,公司也不保证服务不出现错误,也不保证错误都能修复。
公司还可以根据自己的标准,删除用户的数据,拒绝用户的发布:
“如果公司有理由认为您的行为违反或可能违反上述约定的,公司可独立进行判断并处理,且在任何时候有权在不事先通知的情况下终止向您提供服务,并依法追究相关责任。”
此外,公司还能用你的作品挣钱,而且还不给你钱。
你看,在Web2里面,在中心化的模式下,什么都是公司说了算,用户为了使用公司的服务,一般只能接受,有什么办法呢。
这颇有点像员工和公司的关系,公司让你996,你就996呗,换工作也挺不容易的,而且换了也是996。
于是有人就想出了“去中心化”的东西,用户的数据,不是一个实体(人)管,而是1000个人管。
而且这1000个人,严格按照协议行事,要想改数据,得大多数人都同意才成!
这1000个人,天涯海角,素昧平生,共同保护了用户数据的可用性和完整性。
Q:我看您提到可用性和完整性,那数据的“保密性”呢?
我之所以没说保密性,是因为区块链其实更强调公开、透明。
如果需要提供保密性,那也不难。
你想,crypto建立的世界,还用发愁这事吗?
Q:但Web3世界也发生了很多黑客事件啊,你能说它安全吗?
程序都是人写的,人写的就会有Bug,道理就是这么简单。
但BTC和ETH这种基础性的东西,已经在早期非常少数的几次攻击之后,非常健壮地运行了多年。
虽然都会有问题,但从安全性上看,Web1、Web2和Web3是没法比的。
Q:这1000个人凭什么就要为大家服务呢?
所有的crypto技术,在设计协议时,都会考虑其激励模型,也就是如何让干活的人得到好处。
所以,你会看到形形色色的加密货币、代币、Token这些。
只要你按照区块链的协议干事,为数据安全做了贡献,你就会得到好处。
而用户,也可以在DApp里面做贡献,赚Token。
所以,在区块链里,所有参与者是共享生态和收益的。
这个以前是有很大不同的(这里不多说了)
。
Q:可现在所谓的去中心化,哪里能真正做到呢,infura和alchemy不就是中心化的吗,你们这么多人都用。
Signal创始人Moxie在他的一篇文章3、4中说:
“几乎所有DApp都使用Infura或Alchemy来与区块链交互,而且没有使用任何东西来验证区块链状态或响应的真实性。这让我很惊讶。创建一个去信任的分布式共识机制已经投入了大量的工作、精力和时间,但几乎所有希望访问它的客户都是通过简单地信任这两家公司的输出来实现的。”
“区块链的支持者可能会说,如果出现这些类型的中心化平台也没关系,因为区块链上的数据是完整可用的,如果这些平台行为不端,客户可以简单地转移到其他地方。”
嗯,他发现了问题,然后自己回答了问题,回答得很好。
Q:像我这种从来没有接触过Web3的人,怎么能够切身感受一下呢?
用chrome浏览器,或者firefox浏览器,装个MetaMask钱包。
然后打开OpenSea,先感受一下NFT。
这是一个典型的Web3应用。
Q:可OpenSea不也是中心化的吗?你就敢信任它?
OpenSea只是一个前端,前端的中心化不足为惧,因为这种中心化可以被打破。
OpenSea后端的数据是在区块链上,这才是人们最关心的。
Q:卫sir你以前说过,NFT的图片其实并不在区块链上的,这也不好吧。
是的,我在《用直观抓住NFT》这篇文章里说过这件事。
Moxie也发现了这点,他是这么说的:
“NFT不是将数据存储在链上,而是包含一个指向数据的URL。看看流行市场上以数十、数百万美元出售的许多NFT,该URL通常只是指向某个运行Apache的VPS。任何有权访问该机器的人、将来购买该域名的任何人或任何破坏该机器的人都可以随时将NFT的图像、标题、描述等更改为他们想要的任何内容(无论是否不是他们“拥有”该NFT)。”
我的理解是,现在是Web3的早期时代,一切都还很粗糙,以太坊存储很贵,IPFS又还没有普及开来,现在只是最重要的数据在区块链上,还有很多数据仍然是中心化的。
就先这样吧,饭要一口一口吃,关键看未来的发展。
你喜不喜欢它,要看你的认知,你觉得它是宝贝也可以,你觉得它是狗屎也可以。
这就好比,30年前的人,第一次看到Web1的互联网,觉得这玩意能有什么用呢?
毕竟,Moxie这篇文章的标题是:My first impressions of Web3。
Q:看上去,后端都可以去中心化了,那网站前台能去中心化吗?
当然可以,网站前台无非也就是一些html/css和脚本文件嘛,放到去中心化存储系统上就好了。
现在,Web3架构可以想象成这样:
Q:还有一点,我听人说,以太坊上的gas费很贵,然后速度又很慢,每秒可容纳的交易很少,这怎么可以用呢?
嗯,这确实是个大问题,gas费贵是因为大家都想用,那就出价高的先用。
单位时间容纳的交易笔数少,是因为每个区块的大小是有限制的,目前最大也就30Mgas,平均出块时间也就 15秒左右,每笔交易花大约几万到几十万gas,你说能有多少笔交易呢(不用算了,每秒十几笔)。
所以现在有很多人致力于二层技术,就是想在二层解决这个问题,虽然一层的eth2也在致力于解决这个问题。
Rollup技术(包括optimistic rollups、zk rollups)是目前二层方案中最有前景的,Arbitrum One、Optimism、Metis等解决方案是optimistic rollups技术的优秀代表;zkSync和StarkEx则是zk rollup的优秀代表,而且这些二层方案本身也都是去中心化的。
“顾名思义,Rollup技术就是把一堆交易卷起来变成一个rollup交易,所有节点接收到这个rollup交易之后,不去执行被卷起来的逻辑,而只去接受这些逻辑的执行结果。因此这个rollup交易所需要的gas会远小于执行这些交易的gas。”5
二层的每秒交易数可达数千笔,这就大大解决了一层的拥堵和昂贵问题。智能合约可以直接部署在二层,DApp也可以直接调用二层,一层更多就是在用坚实的算法保证数据安全。
这个架构图你可以脑补一下(在provider和ethereum中间再加一层)
。
Q:他们真的能去中心化地解决容量问题吗?
放心吧,计算机和网络技术发展这么多年,我就没见过解决不了容量问题的。
CPU、内存、存储、网速,哪一个的容量问题没有解决呢。
这些年唯一没解决的,是电池容量。
Q:我问最后一个问题,人们对Web3真的有需求吗?
可以换个问法:人们真的需要保护自己的数据资产吗?
Q:Web3就这么简单?我怎么觉得应该更玄乎一点?
要吹的话,当然可以更玄乎一点。
我就不吹了吧。
文|卫剑钒
想学更多,可后台回复web3more
-
The Architecture of a Web 3.0 application(https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application)
-
阿法兔:Web3应用程序架构
-
My first impressions of Web3(https://moxie.org/2022/01/07/web3-first-impressions.html)
-
Signal 创始人:开发两个去中心化应用后,我发现 Web3 可能是伪命题(https://www.chaincatcher.com/article/2068727)
-
什么是Rollup(https://zhuanlan.zhihu.com/p/367736563)
原文始发于微信公众号(卫sir说):Hi,兄弟,Web3到底是怎么回事