2022 年,我们可以从信息流、聊天群中看到许多标题中带有数字货币币价、挖矿、NFT、元宇宙等概念的新闻。出于一些不可描述的原因,我必须开始从事这方面的研究。在链上经历了热闹的数月后,我准备总结下我了解到的信息,帮助大家快速入门。
本文适合谁阅读:
本文尽可能向大家介绍一些 Web 2.0 与 Web3 世界里的概念差异。另外,在介绍过程中,我无法避免会提及一些「币圈项目」,但均不应该被视为投资建议。
在 Web 2.0,所有的服务都是运行在服务器上的,然后通过 Web 前端或手机端 App 的形式让用户参与其中。由于流量的大爆发,也促进了许多开源软件的发布和流行:Nginx 可以让一台配置不是那么好的服务器可以承载更多的并发访问;Redis 提升了一些高频访问信息的调用速度而不必让系统受限于数据库的瓶颈;从豆瓣开始带头使用的 Python 编程语言现在的市场份额已经远超曾经「世界上最好的编程语言」PHP……
如果说这些开源软件扩展了 Web 2.0 的纵向能力,阿里云(代指云服务)则是一种横向创新:它让任何一个开发者都可以在 5 分钟内花几百人民币就架设好一台服务器,一键安装上述软件,部署一个「Hello World」的网页并推广给全球用户。
Web 2.0 的第二阶段是移动互联网的到来。在这个时期,越来越少的项目会做一个功能完备的网站,服务器仅提供 API 给 iOS 或 Android 上的 App,具体的展示逻辑由 App 自己来完成,也就是「C/S 架构」的再次复兴。
在 Web3 的世界,上面描述的架构是什么样?
在这里我们必须要提到本文的第一个,也是目前世界上最重要的区块链项目:Ethereum 以太坊。
**以太坊是一个由全世界 N 台电脑组成的「操作系统」+「数据库」。**这里的「N 台电脑」,背后就是让游戏玩家深恶痛绝的「矿工」。以太坊的协议保证了数以千计的节点能够井然有序地运行,并组成一个以太坊虚拟机(Ethereum Virtural Machine,简称 EVM),虚拟机上运行着大家写的「App」(在以太坊世界里,「App」实际上叫做「智能合约」Smart contract)。
简单展开一下以太坊协议是如何保证秩序的:
TxStreet.com 非常生动形象地用公车排队的例子展示了「打包出块」的过程:
假设区块链上已经有一个「计算器」App,而你希望知道 1+1 的结果。此时你应该:
与在阿里云上直接编程序获得 1+1=2 这个结论不同的是,在区块链上运行的计算将被永远记录下来,所有人都可以看到。因此,计算器这种应用实在太大材小用了,大家应该拿它来做什么,是接下来我们要讨论的事情。
💡 想要详细了解关于 Gas Fee 的逻辑,可以去 Google EIP-1559、MEV 两个关键词。
拥有了这样一台电脑 + 数据库后,最先兴奋起来的是闲着没事儿的开发者。2015 年 11 月 19 日,来自德国的开发者 Fabian Vogelsteller 在 Ethereum 的 Github 项目里正式发起了第 20 号提案。提案大致的意思是,只要你写一个 App(智能合约)实现了以下方法(相当于编程里的 Interface),并花一些 Gas 将这个智能合约部署到链上后,你就拥有了自己的虚拟货币(又称为代币,也就是 Token)!
// 告诉别人这个币叫什么名字,如「Q 币」
function name() public view returns (string)
// 告诉别人此币种的英文代号,如「QCOIN」
function symbol() public view returns (string)
// 告诉别人此币种的精度,目前人民币在我们生活中最小精度是分,也就是 0.01 元,对应的精度就是 2
function decimals() public view returns (uint8)
// 告诉别人本币种的总发行量
function totalSupply() public view returns (uint256)
// 证明某个人的钱包里拥有多少本币种
function balanceOf(address _owner) public view returns (uint256 balance)
// 实现方法让本币种从合约执行用户转移 x 个币给 B 用户
function transfer(address _to, uint256 _value) public returns (bool success)
// 实现方法从 A 用户转移 x 个币到 B 用户
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
// 实现方法让合约执行用户可以允许 B 用户从自己的余额中调用本币种,授信额度为 x
function approve(address _spender, uint256 _value) public returns (bool success)
// 实现方法让用户可查询到已经授权了谁以多少的额度
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
于是我可以通过这个规范发行自己的「Q 币」,并实现以下特点:
和腾讯 QQ 所发行的 Q 币或者任意 Web 2.0 项目里的积分相比,Token 的特点是:它可以流转于所有 ETH 上的 App 之间(想象一下,若要实现可以在抖音中使用 Q 币进行打赏,背后需要多少开发量?),而且总量等信息清楚写在合约内,开源展示给所有人,即使作为发行方在后期也无法修改 App 里定义好的常量。
这种合约被称为 ERC20 式合约。在 2017 前后的「ICO 浪潮」里,许多项目方基于 ERC20 发行自己的代币,利用人性的贪婪,不仅让许多人遭受财产损失,也让真正优秀的项目没能得到应有的关注。
但从技术本质出发,它们只是运行在以太坊虚拟机上的一个 App 而已。
💡 想要了解更多关于 Token 的设计思路,可以去 Google Tokenomics 这个关键词。
RSS 是一个非常能体现 Web 2.0 精神的信息接口形式。Web 2.0 初期几乎所有博客都提供了 RSS 的输出,大家通过 Google Reader 等 RSS 聚合器获取世界上正在发生的新鲜事。
而在基于 Ethereum 的 Web3,这种开放性被提升到前所未有的高度:
这就意味着:任何可以连接到 ETH 任意一个节点的人,都可以看到 Ethereum 世界上所有的人在做、做过的所有的事。
像 Dune.xyz、thegraph.com 等服务,就对链上的全量数据做了聚合,包装成大家比较喜闻乐见的数据呈现形式。在 Dune.xyz 里,我可以用一条 SQL 查询过去 365 天链上去中心化交易所以美元计价的交易金额:1,029,118,775,599.5564。
SELECT SUM(usd_amount) FROM dex."trades" WHERE block_time >= now() - interval '365 days' AND category = 'DEX';
在 Etherscan 上,我们可以看到每一笔交易、每一个合约、每一个用户的具体形态,也可以看到类似于 Ethereum 用户总量和用户增速、日活数据等信息。
例如:OpenSea 作为区块链上最大的 NFT 交易平台(类比于 Web 2.0 世界的淘宝),它在链上的合约地址是 0x7be8076f4ea4a4ad08075c2508e481d6c946d12b,我们只需要订阅这个地址相关的 transaction,就可以知道谁在什么时间买了什么 NFT。我们也可以通过导出这个合约的所有历史交易,来分析 OpenSea 的用户增速等平台方信息。
不需要给 Web3 App 开发 API 功能,Web3 本身自带 API。
在 Ethereum 的世界里,你的身份是由加密算法生成的一对公钥和私钥。生成公钥私钥的过程完全不必联网,通过脚本就可以完成。为了方便,你也可以到 Vanity-ETH 网站来亲自体验一下这个过程。其中公钥就是大家最常提起的钱包地址,私钥是用来签名交易的密码。
对比一下 Web3 与 Web 2.0 的「登录」逻辑区别:
通常,用户在登录 Web 2.0 应用时需要提供 E-mail + 密码或手机号 + 验证码的组合来向服务器证明自己的身份。为了提升安全性,许多服务都增加了「多因子验证」的流程,即:登录时除了密码,还需要提供 E-mail 验证码或 OTP 验证码。登录成功后,服务器颁发一个 Token 给客户端,客户端可以用此凭证来读取、发布信息。
Web 2.0 的账户与你的个人身份是强绑定关系。强绑定的一个极端是你的银行账户:即使你忘记了取款密码,也可以通过携带身份证到银行柜台申请恢复。
但在 Web3,唯一能够证明你拥有一个公钥的方法就是私钥。如果你不慎丢失了私钥,会有两种结果:1. 别人可以瞬间转走你的全部资产;2. 你可以看到钱包里的资产,却再也无法使用它们(这里有一个因忘记密码丢了 7,002 个 BTC 即 3 亿美金的惨剧)。
因此在 Web3 的 App 中,用户是万万不可将私钥上传到云端的。某些服务为了确认你是钱包主人的身份,登录验证的过程就变成了签名验证的过程:
为了让这个过程体验更好 + 更安全,Metamask 推出了 Chrome 扩展,是现在最流行的密钥管理工具(记得管理好助记词)。
💡 可以去 https://metamask.io 下载 Chrome 扩展,然后打开 https://opensea.io 体验一下 Web3 App 的登录流程
本期就先聊以上几个主题,下一期可能可能会介绍 NFT(ERC-721)、预言机(Oracle)以及去中心化金融(DeFi)等话题。如果你有任何想说的话,请通过邮件 0-delta.blender@icloud.com 联系我。
另外,给大家准备了课外读物:《精通以太坊——实现数字合约》中文版,强烈推荐有编程能力的同学仔细阅读 + 亲手试试。
GN.