Skip to content

bynil/web3-intro-for-programmers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

工程师视角的 Web3 初探

本文是准备在线分享时的文字版讲义,建议搭配原视频作为补充阅读。

视频直达:YouTube | bilibili

Bitcoin - 区块链技术的起源

2008 年 10 月 31 日,中本聪发布了比特币白皮书《Bitcoin: A Peer-to-Peer Electronic Cash System》,试图提出一种基于加密证明而非基于信任的电子支付系统,允许任意双方在不需要信任第三方的情况下直接交易。唯一的前提:只要诚实节点总体上相对于相互合作的攻击者掌握更多的算力,系统就是安全的。

对比日常使用的银行系统,我们可以轻松对一个无中心化机构的电子支付系统提出几个关键问题:

  1. 这个支付系统里怎么创建、表示一个账户?
  2. 系统里的钱币如何被生产出来?
  3. 转账操作如何确认是账户持有人发起的?
  4. 账户余额谁在维护,避免一份钱花两次?
  5. 整个系统的运行成本谁来支持?

比特币的设计思路:

  1. 基于 P2P 网络维护一个全局账本,全网所有节点地位相同,都持有这个账本的全量数据,账本内容完全公开可追溯。
  2. 有些节点是矿工,负责把网络中的交易打包到账本中,并赚取打包的奖励和交易手续费。
  3. 使用非对称加密的公私钥体系设计账户,公钥就是账户地址,持有私钥的人可以通过签名交易来支配账户里的资产。公私钥在数学上保证了签名不可伪造也不可抵赖。签名后的交易被广播到网络中,等待矿工打包。
  4. 每次打包一些交易(最多 1MB 大小)会形成一个区块,根据区块头的内容可以算出这个区块的哈希值,同时区块头里有一个指向前一区块的哈希值,从而这些不断增长的区块可以串接起来形成单向有序链表,也就是区块链。所有历史交易记录都保存在区块链中。
  5. 矿工打包出的区块除了满足数据的合法性要求(交易内容都是可以通过验证的),还需要给出一个工作量证明。通过调整随机值 nonce 来使得区块哈希值小于当前系统指定的难度(哈希值前面 N 个 0),因为计算哈希值只能靠暴力碰撞,所以这个寻找 nonce 的过程可以作为矿工的工作量证明(它尝试碰撞了非常多次)。矿工一旦找到合适的 nonce 值会立马广播到全网,从而赚取它的挖矿收益。新的区块被广播开之后,所有矿工就会沿着这个新区块继续去尝试下一个区块。计算哈希过程需要消耗一定的时间无捷径,但验证过程相对简单,几乎可以瞬间完成。

为了使过程描述简单,这里省略几个的细节:

  1. 比特币的区块链由一个个区块串联构成,每个区块包含一个或多个交易。而对于一个交易,它总是由若干个输入(Input)和若干个输出(Output)构成,一个 Input 指向的是前面区块的某个 Output,Coinbase 交易(矿工奖励的铸币交易)没有输入,只有凭空输出。所以,任何交易,总是可以由 Input 溯源到 Coinbase 交易。还没有被下一个交易花费的 Output 被称为UTXO(unspent transaction output)。比特币设计时没有「账户余额」的概念,而是用了 UTXO 来间接维护状态,A 给 B 执行一次转账,这笔钱对于 B 来说还未花费,会暂存在 transaction 中,接收人 B 有随时花费一次这笔钱的权利。B 账户的余额=所有B有权限的 UTXO 金额总和,需要从创世区块开始遍历所有交易才能汇总出来,UTXO 有点像 MySQL 的 binlog,记录了状态转移过程。余额通常是用户使用的钱包软件自己计算的。相对账户模型,UTXO 模型可以更容易实现并行处理和隐私保护,并追踪完整交易路径。一笔 UTXO 可用的比特币不一定正好等于下次需要的数量,但 UTXO 只能花费一次,所以通常会把多余出来的部分找零给自己。

  2. 比特币期望出块的平均时间是 10 分钟,TPS 约为 5。每 14 天,整个比特币系统会根据之前出块速度调整全网难度来靠近 10 分钟。

  3. 区块体里存放了这次打包的 N 笔交易,所有交易按规则生成一个 merkle tree(中文叫默克尔树,形状像二叉树,只有叶子节点是真实数据,其他每层都是汇总后的哈希值),每个区块头里有个 merkle root 字段记录默克尔树的根,来保证区块体交易不可篡改。

  4. 比特币的账户地址准确来说是公钥经过哈希和特殊编码后的字符串,不是公钥原始值。公钥在第一次广播签名时才会暴露。

  5. 如果同时有多个矿工挖出区块(因为矿工地址不一样所以区块内容肯定不一样),都暂时认为合法,产生分叉。节点以第一个收到的区块为准,继续往下挖,很快会在某个分叉上形成一条最长的链,这时所有节点都以最长链为准,达到最终一致性。

现在回到我们一开始提出来的那几个棘手问题,看看比特币是怎么解决的,并与当前银行的解决方式对比:

问题 银行方案 比特币方案
1. 这个支付系统里怎么创建、表示一个账户? 客户拿身份证去银行申请银行账户,拿到银行卡和密码。 无需特意注册,任何一个公钥都是地址,直接拿来用。
2. 系统里的钱币如何被生产出来? 政府控制的央行印钱。商业银行吸收用户存款。 矿工挖出区块时,允许它创建一笔奖励交易转账给自己(术语是 coinbase transaction)。比特币是凭空产生的,但这个奖励每 4 年减半,最终只能产出 2100 万枚比特币(2022 年 6 月有 90.7% 的比特币已经被挖出)。
3. 转账操作如何确认是账户持有人发起的? 用户使用银行卡配合密码。 用私钥签名交易后发布到网络里,所有节点都会验证这个签名是否正确。持有私钥就可以支配这个地址的所有资产,丢失私钥就丢失资产。
4. 账户余额谁在维护,避免一份钱花两次? 进出账时银行维护了余额,保证同时发生的两笔交易有先后关系,不能超额支出。 比特币的交易只能串行执行,一个 UTXO 被使用掉,后续就不能再用了。重复花多次会使得交易不被节点认可。可以认为一个区块里的所有交易处在一个数据库事务里,要么都执行,要么都不执行(不一定失败,后续区块可能继续执行)。
5. 整个系统的运行成本谁来支持? 银行。 只运行节点成本很低,很多普通用户会跑一个节点。挖矿成本高,但矿工只要收益为正,就会持续挖矿,为系统注入算力。

几个问题:

  1. 如何避免作恶? 转账交易需要私钥签名,无法伪造和重用,所以恶意节点本身并不能伪造交易。恶意节点如果试图向其他人胡乱广播区块(拜占庭将军问题),要么因为没有算力证明导致区块被其他节点丢弃,要么就要花费巨大算力生成空转区块,影响有限且毫无好处。由于节点之间可以产生分叉,然后用最长链覆盖,如果恶意节点算力非常强,可以制造区块回滚(自私挖矿攻击):先支付一笔钱给 A,故意藏着自己挖出的区块不广播,这个私藏的链里这笔钱被先花干净转给自己另一个地址里了,等到时机合适时广播出去让其他人已有的区块回滚,之前转给 A 的交易被判为双花而失效。但这样的行为已经不太可能:比特币目前算力巨大,单个矿工想控制 51% 以上算力成本非常高;现在转账一般要等六个区块确认才算成功,拥有这么多算力,明明可以正常挖矿赚钱,去赌最长链搞破坏不划算。
  2. 挖矿只是在无意义做哈希计算,是否是浪费算力和能源? 哈希计算的确是无意义的,但由此得出的工作量证明保障了整个比特币网络的安全。其他人想篡改历史区块必须配备极大算力。
  3. 为什么设计成 1MB 区块大小和 10 分钟出块间隔? 太大体积的区块会导致广播时占用带宽,全网同步区块耗时过长。出块太快会导致分叉过多,诚实节点的算力被分散,回滚难度降低。

Ethereum - 迈入区块链 2.0

中本聪在提出比特币构想时,本意是希望创造出一种不依赖中心化机构就能自由转账的数字货币,区块链是实现这一构想的手段。后来大家发现区块链的思路可以从比特币中剥离出来成为一种解决方案,以实现去中心化的全局状态同步,虚拟币是第一个也是最合适于这套方案的应用,但仅限于转账场景就太单一,有没有可能提供更丰富的功能?

我们知道买来一部新的智能手机或者电脑时,里面只有操作系统和内置应用,你根据需求要什么应用就自己再安装,市面上的应用和开源代码之所以能够在你的机器上运行,是因为你的机器是一台通用计算设备,它封装隐藏底层硬件电路,向上暴露出规范的接口,所有应用程序都遵循一样的接口就可以衔接工作。如果将这个思路再精简一点,就追溯到计算机的老祖宗图灵机,理论上我们只需要一个图灵完备的计算模块再加一个存储模块,就可以完成当前世界上所有的可计算需求。那如果我们把计算模块和存储模块缝合到区块链上,岂不是就构造出了一台去中心化通用计算机?

以太坊最初就是这个思路。

比特币其实设计了脚本功能,但为了控制风险减少复杂度,比特币的脚本能力非常有限,大家基本就只用来转账和花样转账(多签、时间锁)。以太坊创始人 Vitalik Buterin(中文用户常称之 V神,1994 出生,非常年轻)在 2011 年接触到比特币后很感兴趣,还办了相关杂志,他就希望扩充比特币脚本能力来实现更广泛的应用,但比特币核心开发团队对新特性是极其极其保守的,不支持这个改动。Vitalik 认为可以在区块链上构建出一种叫智能合约(smart contract)的东西,提供广泛的可编程能力来满足现实世界里各种各样的需求而不仅仅是转账。他把自己的想法写成白皮书发布后召集到了一波人也筹到一笔钱,就开始了以太坊项目。(以太坊的想法与 Vitalik 玩魔兽世界游戏时被暴雪改动了喜欢的英雄技能没有直接关系,这个经历常被媒体引用来增加故事性。我个人非常欣赏 Vitalik,并非因为他现在是区块链行业举足轻重的核心人物,而是因为他在线下访谈时展现的清晰思路、半人半机械的特殊风格,以及个人文章里的哲学性思考。)

以太坊相对于比特币,做了几个关键的改进:

  1. 引入账户系统和世界状态。以太坊也有自己的原生代币 ETH,每个地址持有的 ETH 余额直接明确记录下来,转账就是分别增减两个账户的余额。账户的基本信息里有一个 nonce 自动从 0 开始计数,每次发出一个交易后就递增,用来避免重放攻击。
  2. 引入智能合约。智能合约在被创建时携带一份代码,以太坊的节点客户端提供了一个叫 EVM(Ethereum Virtual Machine)的虚拟机环境,能够执行这个代码,智能合约的代码创建后不可修改,code is law,在链上也有一个公开地址,但不存在私钥,这个地址是作为门牌号供别人调用使用的。类比我们现实世界里的自动贩卖机,就是内嵌了「给我 3 块钱,我给你吐一瓶水,如果没水了就把 3 块钱还给你」的合约同时带有一点安全保护机制的机器。EVM 工作流程有点像 Java,源代码经过编译形成中间状态的字节码,字节码能被加载到 JVM 中执行。EVM 支持的操作是图灵完备的,所以具有理论上的通用编程能力。虽然有多个支持 EVM 的上层语言,目前行业里基本只使用 Solidity 语言开发。
  3. 账户发起的一笔交易可以是普通转账,也可以是调用某个智能合约的某个函数,这样就有动作可以驱动智能合约代码的执行和状态变更。
  4. 发起函数调用时根据 EVM 的指令进行收费,每个指令消耗多少单位的 gas 已经预先规定好,最终体现是发起方的 ETH 被消耗了,这个给矿工执行 EVM 操作而付的费用叫 gas 费,总费用 = 消耗的 gas 单位数 * 单位价格,单位价格由用户指定。每个区块有最大的可消耗 gas 数,既避免用户发起恶意交易来拥堵网络(需要成本),也用来规避停机问题。

以太坊通过引入图灵完备的智能合约编程+智能合约可以持久化自己内部的状态(可以理解为它的全局变量)来向上提供丰富的可操纵性,号称世界计算机。账户的基本情况、智能合约的持久化数据共同组成整条以太坊链的世界状态,用户通过发起交易推动世界状态一次次改变。相对于比特币构造出的无状态分布式账本,以太坊本质上是一个串行执行变更的分布式状态机。 eth-state

以太坊的全局状态通过一种改造过的 Merkle Patricia Trie 来记录,每次产生新的区块都会导致状态改变从而导致 merkle tree 的根节点哈希值改变,那么不同的哈希值就相当于世界状态有了一个新的版本号,通过哈希值又可以快速查找到对应的状态数据。这里可以类比 git 的版本管理,每个 commit 都有自己的哈希,最新版本的状态是一连串的历史 commit 演变而来,如果我有哈希值就可以快速定位到一个 commit,也相当于定位到这个时间点的版本上。

共识机制

不管比特币还是以太坊,我们都强调一个概念:区块链的安全和去中心化特性是由诚实节点们形成的共识保证的。那到底什么叫节点间的共识呢?

抽象上说,共识是大家对某个规则、流程、机制的共有认同,P2P 的节点之间是地位对等的,谁都可以站出来说话,只要你说的话符合既定规矩,我就认可你的话。你说话嗓门大或者很多人一起说同样不合规的话,都没用。当区块链上的所有节点都同意发生在网络中的事实,这就是「达成共识」。

从技术和数据角度看,共识则可以简单理解为推动全局状态变更的改动被节点们认可。前面强调了以太坊是一个大的分布式状态机,但从根本上讲,比特币也是一个分布式状态机,比特币的状态就是全网 UTXO 集合。所以我们可以下沉到状态机层面去理解共识,节点们要达成共识,核心就只做了两件事情:

  1. 验证新的区块是符合既定规则的。比如区块头里的哈希值计算正确、哈希值小于全网难度、时间戳在正常范围、区块体里面除了 coinbase 奖励外所有转账都包含支付方的合法签名、支付方余额够用等等。
  2. 新的区块被认可后,所有节点从上一区块的状态执行一串变更到达新的状态,能保证新状态一模一样。比特币比较简单,每次转账无非是消耗一些 UTXO 再新产生一些 UTXO。以太坊节点则使用约定好的默克尔树更新规则去修改世界状态,这套规则会保证全网节点各自修改完后,各自的世界状态每个比特都一致,否则默克尔树的根就对不上了。类比我们日常开发里的例子,给定一个 map 把它序列化成 JSON,因为 JSON 格式里可以随意塞空格、换行,键值对的顺序也不固定,所以不同的程序语言、不同的序列化库、不同的机器、同一台机器的多次执行最后得到的结果并不一定一样,但是如果我们事先要求大家序列化时过滤掉无意义的空字符并且把 key 严格字典排序,那么不管你怎么写代码、执行多少次,只要你符合这个要求,得到的序列化结果就是一模一样的。或者也可以类比 MySQL 主从实例之间用 binlog 同步数据的过程。这一特性限制了智能合约代码运行结果具有确定性,所以链上不能产生随机数,也不能从外部数据源导入数据(比如发起网络 api 请求)。

ERC 标准

我们经常听说某某项目发币了,非公链项目的币通常都流通在以太坊上,说是币,本质上是以太坊上的一个合约,以太坊原生代币只有 ETH,但借助智能合约可以构建出一个类似银行存取款机的合约,这个合约有名称、总供应量、小数点精度、转账函数等,使用起来效果相当于一个新的币种。因为类似的需求非常广泛,以太坊就把这种需求用提案和文档的方式规范化,约定了这种性质的合约应该暴露哪些函数出来给大家用(很像 Go 语言里的 interface)。大家都遵循这一规范构建合约后,可以轻松被其他应用集成进去。ERC-20 就是以太坊的同质化代币标准。2017 年大火、制造了大把泡沫、收割了大量韭菜的 ICO 潮就是基于 ERC-20 发行代币。如果你有一点代码经验的话,ERC-20 核心的数据结构很好实现,就是一个地址到数字(余额)的映射(哈希表)。Solidity 代码这样:mapping(address => uint256) private _balances;

ERC-20 描述是同质化代币,同质化的意思是你拥有的一百个币与我拥有的一百个币是等效的,我们互相交换一下没有任何影响,因为本质上只是一个余额数字。另一个常见的标准叫 ERC-721,描述非同质化代币也就是大家常听说的 NFT(non-fungible token),这个代币不像账户余额只是数字,而是每个代币都有自己的编号且不可分割,比如总供应量 100 的 NFT,对应的是编号 0-99 的 100 个代币。因为编号不一样,所以这个代币可以携带自己独有的属性信息,使得它们各不相同。落到代码层面也很好实现,做一个 ID 到地址的映射就好了。Solidity 代码这样:mapping(uint256 => address) private _owners;

在 ERC-20 的视角看,每个账户地址在它的合约里是唯一的,变化的是账户里的余额;在 ERC-721 的视角看,它的每个代币都是唯一的,变化的是代币的持有人地址。

去中心化应用的架构

传统的互联网应用:

去中心化应用:

总结

以太坊将智能合约引入区块链后,为构建上层的去中心化应用(DApp)提供了可能,各种类型的应用层出不穷,这也使得以太坊成为市值仅次于比特币的第二大公链,而且由于已经积累了足够丰富的生态和巨大的沉淀价值,地位难以撼动。后文我们提到的各种典型应用,几乎都运行于以太坊或者与以太坊有间接关系。

一些没详细讲的

  • 还有一些公链设计用来做其他事情,最常见的就是去中心化存储 Filecoin 和 arweave,它们更像互联网后端常见的分布式存储服务,理念和目的与比特币以太坊不一样,所以机制也完全不同。
  • 除了工作量证明(PoW)外,还有其他让全网达成共识的机制,比如权益证明 PoS,历史证明 PoH,权威证明 PoA。以太坊很快就要从 PoW 转向 PoS。
  • 智能合约不能获取到链外的数据,比如我们写一个合约来赌球,球赛的结果以太坊肯定是不知道的。把这种链外的数据写到链内的工具叫预言机(oracle)。预言机是区块链与现实世界进行数据交互的接口,已经有去中心化运行的预言机产品,保障上链信息的可信度。注意这里的预言不是提前知道的意思,只是英语单词直接翻译过来有点歧义,本意是想表达一种客观无疑的确定性,理解为「谕言」更合适。
  • 现在比特币主要用于价值存储,以太坊用于构建应用,目前还没有公认的区块链 3.0 的说法。曾经有公链这么标榜过自己,凉了。
  • 以太坊矿工打包交易通常是根据交易的 gas 费单价高低来排序的,想要矿工优先打包你的交易,那就多花些钱去贿赂矿工。虽然以太坊把出块时间缩短到平均 13 秒,但总的 TPS 还是在 15 左右,很小的数量级。以太坊用户增多使用量上来后,每个区块都被用满,于是用户开始内卷,都在提升 gas 费,这一度导致整个以太坊的平均 gas 费居高不下,高峰期一笔合约操作的成本可以达到上百美元,以太坊也有了贵族链的称号。
  • 当然还有其他的一些知名公链比如 Solana, Avalanche, BSC, NEAR,智能合约当然是标配,新公链通常设计了新的共识机制来提升 TPS(有些自称达到大几千)。由于以太坊上头部 DApp 太多了,公链想拉项目方来自己这里开分店时最好的方案就是兼容 EVM,项目方不用重新开发就能直接部署上去。智能合约的代码一旦部署就不可修改而且主流项目的源代码都是开源的,所以如果代码有安全漏洞,很容易被黑客将锁定在合约里的代币一把薅走,损失难以追回。重新开发一份不仅有工作量,还会使得之前久经验证的安全性又要从零开始积累用户信任。EVM 俨然成了互联网服务端里 Linux 或者 MySQL 般的存在,不是不能绕,绕开成本很高。有一部分公链选择原生不兼容 EVM,但往往也会有类似 EVM 模拟器的项目去试图把 EVM 兼容性移植进来。
  • 以太坊主网改动难度较大,扩容方案集中在 Layer 2(二层网络)上,其基本思路是通过在主链外的二层网络上进行计算、交易等业务处理,以获得较快速的响应、高扩展性和低费用,并将最终的状态变更结果反馈到主链上,从而减少主链上的负担,实现区块链网络的可拓展性。不太严谨的比喻,2 车道地面公路拓宽成 4 车道后仍然不够用,但又不太方便继续拓宽,为了同时容纳更多的车流在上面修了高架桥,最终高架的车辆也会下来汇入地面。目前热点在 Optimistic Rollups 和 Zero-Knowledge Rollups。
  • Token:中文译为通证。区块链里的价值载体都可以称为 Token,不严谨的理解可以把 Token 视为 FT 和 NFT 的集合。

Web3 概念

2020-2021 年的这轮牛市里不同类型的去中心化应用轮番成为行业热点,Web 3.0(简写为 Web3)这一名词又再次被大家提起,2021 年 12 月美国国会的一场集结了诸多加密行业大佬的听证会让 Web3 彻底出圈。好像人人都在谈 Web3,好像任何与区块链有关东西都可以被纳入 Web3,搞得大家云里雾里,到底什么是 Web3?

如果你有尝试过去搜索 Web3 的解释,得到的结果很多,但绝大多数都是大而上的模糊概念(比如用户数据确权、破除 Web2 的垄断),鲜有人愿意用普通人听得懂的话精确地定义 Web3,或者告诉大家如何判断一个产品是否属于 Web3。这是因为 Web3 目前的确就处在一个不太能被精确定义的阶段,它描述的是一个愿景、一种产品文化、一类应用范式,所以马斯克觉得这个词是营销话术。在我的知识范围能找到互联网行业里类似性质的词是「云原生」,云原生描述的是一种最佳实践和指导软件架构设计的思想,能够最大化地发挥云的能力。但具体到使用 K8s、Docker 搭建微服务和容器化,则是实现云原生的手段。

这里我按自己的主观理解来尝试给大家定义一下 Web3,不一定对,仅供参考。

广义的 Web3:2014 年,Gavin Wood 第一次提出针对去中心化世界的 Web3 概念(Gavin Wood 是以太坊联合创始人和前 CTO,Solidity 和以太坊黄皮书作者,后来自己去搞了 Polkdot 项目,2014 年时以太坊还未发布;Web3 名词在世界上首次被提出是很早之前描述语义化网络,与区块链无关),Gavin Wood 强调 Web3 是一个基于区块链、无需信任的去中心化生态系统。现在大家高频而广泛使用 Web3 术语,Web3 概念已经被泛化,广义的 Web3 其实等同于「加密货币行业」,Web3 = Crypto。比特币以及基于比特币延伸出来的加密货币、区块链相关的一切生态、行为都属于 Web3。Web3 不是 Web2 的改进版本,它无法替代 Web2 已经做得很好的东西,它引入基于密码学的信任,移除信任带来的内耗。

狭义的 Web3:在 Web 1.0 和 Web 2.0 定义里,Web 这个词一直偏向描述网站服务,属于应用层业务。如果把定义限制在应用层上,狭义的 Web3 描述的是这样一类应用或解决方案:

  • 准入充分自由,门槛低,用户身份通过钱包地址确定。
  • 核心业务数据存储在区块链上(业务过程不一定发生在链上)。
  • 数据所有权归用户所有,价值转移不需要第三方授权。
  • 内容经济的价值有效地反馈给创作者。

登录入口的变迁: connect-wallet

术语铺垫

稳定币

加密货币价格太不稳定了,而且通常一跌大家一起跌,行情不好时你无论换成哪个币都是跌的。可是要是换成法币的话,一般得收一笔不菲的手续费,这个时候就需要一种「在虚拟世界使用,但是价格锚定法定货币」的货币来支持大家各种骚操作,于是,稳定币应运而生。

USDT/USDC/BUSD 是常见的由现实世界里的中心化机构锚定美元抵押物发行的美元稳定币,锚定的意思是你可以用 1 美元换成 1 个币,也可以反过来将 1 个币找他们兑换成 1 美元。USDT 使用范围最广,用户黏性强,但审计不太透明,有相当比例的非美元资产。同时 USDC/BUSD/USDP 等几种稳定币的发行方持有牌照,相对来说更合规可靠。

稳定币行话简称 U。

资产跨链

区块链和加密货币的世界里,无论从体量、交易量还是用户人数来讲,比特币都还是当仁不让的龙头老大。如何在以太坊的智能合约里把比特币也带进来一起玩?比特币与以太坊是两条独立的链,纯技术上是不可能做到互通的,但我们可以借鉴稳定币的思路,找一个公司发行以太坊上的李鬼版 BTC,让这个 BTC 与真实的 BTC 1:1 锚定,相当于间接把比特币转移到了以太坊上。类似的操作可以放到各种其他公链上,让不同的资产在链间流动。如果两条链都是支持智能合约的公链就更好了,可以通过公开透明的智能合约来确保锁定和铸造操作不受第三方控制。

APR APY

APR = Annual Percentage Rate,年回报率

APY = Annual Percentage Yield,年收益率

投资收益可能是按日或者按小时结算的,收益可以继续产生复利,APY 就是把复利包含进去计算出的年收益率。

空投(airdrop)

简单来说就是项目方免费送给你一些代币。大多数的空投来自第一次发行自己 Token 的项目回馈自己的老用户并通过空投活动进行市场营销,提升知名度。

下图是我被空投的 Optimism 项目代币。

MetaMask(小狐狸)

用户端浏览器与 DApp 网页交互的浏览器扩展,帮用户管理私钥和进行签名。

Web3 典型项目简介

去中心化金融(DeFi)

去中心化金融(Decentralized Finance)指的是不存在中心把关人且完全在区块链上运行的金融服务,从去中心化交易所到借贷协议,再到期权和期货合约,覆盖了常见的传统金融场景。DeFi 应用的首要目标在于重新思考:在没有中央银行掌控权力的世界体系中,如何通过去中心化的形式实现旧式银行系统提供的金融服务,将金融秩序在链上重构。

DeFi 是目前以太坊最为成功的 DApp 场景,甚至可以说是智能合约的杀手级应用。超过 500 亿美元(峰值超过 1000 亿)的资产锁定在以太坊的 DeFi 协议当中(Total Value Locked)。金融业务的特殊性在于,其核心产品本身就是金融合约,除此之外别无它物,因此对于智能合约应用来说简直是正中下怀,率先落地是情理之中。

DeFi 与传统金融提供许多类似的服务,但核心区别是 DeFi 以技术作为信任背书,而第三方金融机构即使在强监管下也有信任问题(比如银行挪用存款后暴雷)。

DEX(Decentralized Exchange)去中心化交易所

Uniswap 是以太坊上的去中心化交易所龙头,使用创新的 AMM(Automated Market Makers)自动化做市商模型替代传统的订单簿模型,从根本上改变了用户交易加密货币的方式,引领 DeFi 赛道崛起。

订单簿模型:

恒定乘积公式:X*Y=K

流动性提供者存入 A 和 B 两种代币,构成这个交易对的流动性资金池,此时价格就是 A 相对于 B 的价格(汇率)就是池子里两者数量的比例 A/B。

交易者来用 A 兑换 B,其实相当于往流动性池里充入 A,拿走 B。恒定乘积公式要求:交易者单次操作前后资金池里 A 与 B 的数量都应该符合 X*Y=K。

恒定乘积公式达到的效果:

  • 单次交易量越大,产生的滑点就越大,偏离实际价位就越大,而池中的资金储备越多、交易深度越大,则能尽量减少滑点的溢价。
  • 即使汇率离谱到很大,池子仍然有流动性。你再有钱也没法把资金池买空。

资金池里两个代币的汇率依赖外部套利行为来跟踪市场价。简单说就是池子里价格有倾斜时,会有人从其他交易所低买高卖套利来平衡差价。

借贷

在银行存款可以获得利息,需要资金的人或公司可以找银行贷款,储户获得的利息来源于银行放贷出去的收入。这套模型并不复杂,复刻到链上就是去中心化借贷服务,借贷平台的盈利模式为赚取借方与贷方的利息差,并且在项目初期通过项目方 Token 作为营销推广成本对存款方和借款方都进行数字资产补贴。

这里以 Compound 为例,手上持有代币的用户可以将用不上的代币存放到 Compound 资金池中,不同类型的代币有不同的利率,存入后即可生息,随时可以提走。有借币需求的用户可以存入抵押品,在不超过抵押率的前提下借走其他资产,归还时附上利息,如果中途资不抵债会被强制清算。一个代币资金池被借走的比例越多,很显然利息就会越高。

几种典型的借贷场景:

  • 坚定的持币人(HODLer),比特币以太坊拿手上不管价格涨跌都不会卖,那不如放贷出去收点利息。
  • 临时需要使用某种代币一段时间,但不想购买后承担价格变化风险,那就抵押手上的币去借出来,用完再还回去。
  • 套娃加杠杆做多做空。

类似 Uniswap 和 Compound 服务里的流动性提供者(Liquidity Provider)不仅可以赚到交易手续费或利息,项目方还会用自己发行的代币奖励用户,鼓励大家提供流动性和使用产品,这就有了流动性挖矿。项目方奖励的币往往可以直接兑换成 U,使得 LP 的收益大大增加,有时候甚至可以在初期把收益率做到夸张的 10000%。2020 年流动性挖矿带来的 DeFi 热潮被称之为 DeFi Summer。

DeFi 的借贷目前都还需要超额抵押物进行担保贷款,不能像银行一样通过个人征信来无抵押贷款。但 DeFi 里也有传统金融里不存在的模式闪电贷:在同一区块内无抵押地借出并偿还贷款。闪电贷的基本流程:

  1. 用户找 DeFi 资金池借入非常大的一笔钱。
  2. 使用贷款购买 DEX A 的代币。
  3. 在 DEX B 上转售代币。
  4. 还款+闪电贷利息。由于 A 和 B 有价格差,带来了利润空间。

资金池的智能合约保证,这样一套操作是事务性的,要么全部完成,要么都不进行。所以并不用担心用户借了钱不还,如果用户不还钱或者没还够,所有交易都会被视为失败进行回滚。

这里只选取了 DEX 和借贷这两个最典型的 DeFi 场景进行介绍,DeFi 赛道里还有其他产品形态比如保险、衍生品、去中心化稳定币等,DeFi 项目之间可以像搭积木一样互相组合产生协同效应(比如收益聚合器将用户存入的资产自动最大化获取收益)。DeFi 最重要的意义是能够让比特币等主流数字资产产生现金流和币本位收益。

NFT

上面讲到过针对非同质化代币的标准 ERC-721(类似的还有 ERC-1155 等改进版),NFT 具有以下特点:

  • 可验证性:所有人都可以通过链上数据查到持有者是谁。
  • 独特性:永久保存并且不能被更改的元数据。
  • 稀缺性:合约里的供应量决定稀缺程度。
  • 不可分割性:通常不可被切分。

NFT 的核心用途在于提供了一种标记原生数字资产所有权的方法,在技术层面是将一份任意格式的数据放到去中心化存储上,图片、声音、视频、纯文本都可以。它不是艺术品、头像或球星卡本身,而是一种通过将资产上链来跟踪资产所有权的方法,现实世界的艺术品、文体收藏、房产、证券、会员卡等一切有价值的东西皆可上链。由于底层技术赋予其可验证、防篡改等属性,NFT 可以改良传统的证书确权+中心化机构监管模式。

NFT 是一种可转移 Token,可转移就会存在交易市场。当前 NFT 顶流蓝筹项目无聊猿(BAYC)的单个最低价格在 95 ETH。每个 NFT 通常也会自带一些属性,如果属性较稀有,价格往往也更高。

NFT 的价格由供需情况决定,而供需则与项目方营销、社区氛围、项目质量相关。由于 NFT 方便主流人群理解门槛很低,所见即所得,又容易带来流量和关注度,是 Web3 里最广泛出圈的产品,诸多艺人和体育明星将自己的头像换为 NFT 图。

NFT的用户类型与消费动机:

Mirror

Mirror 是一个 Web3 原生写作平台,功能类似 Medium。这里把 Mirror 专门拿出来介绍是因为它的产品设计带有浓重的 Web3 风格,非常典型。一个去中心化文字平台不是把 Web2 文字产品改造一下将数据上链这么简单,Web3 世界有它独特的生态和组件。

Mirror 在产品形态上做了不少的思考:

  • 用户发布的文字内容永久存储在 Arweave 去中心化存储上,这个存储费用是一次性的,Mirror 官方垫付。
  • 文章编辑器里可以直接嵌入 NFT,像嵌入图片一样简单。还可以嵌入众筹和拍卖模块,读者在阅读文章时如果想参与,直接与链上合约交互即可。
  • 文章可以被铸造成 NFT,被读者领取或收藏。
  • 拍卖或捐赠所得收入可以设置分配规则,通过智能合约将创作者的收入划分一部分给合作方。

一篇示例 Mirror 文章:https://mirror.xyz/0x77987306626c8AD7D4Ef770CdcF82ff1E59d8aF0/bjmAYqJPnAhnXEEV4dXFkLplKtfopKSp0d3ZDJz7X78

从创作者视角看,Mirror 也是一个针对单篇内容的众筹平台,自诞生起 Mirror 就绑定了价值属性,在上面发布的数字内容通过 NFT 代币化被赋予了价值,并可通过众筹的方式将单篇内容的所有权出售给多名投资者。和以往知识付费模式不同,Mirror 的核心创新点在于,通过 NFT 和智能合约构建了一种全新的所有权经济模式,为创作者带来实际的价值。

GameFi

我们日常玩游戏的时候会往网游里充钱购买装备、皮肤、点数等,只有消费行为,而 GameFi 通过 NFT+DeFi+游戏 的形式提供一种能通过玩游戏赚钱的渠道。项目方将游戏中的角色、道具做成 NFT 的形式贩售,并且设计经济模型使得在游戏中可以赚取 FT、NFT 资产,同时这些资产能在市场里交易,让 GameFi 玩家可以边玩边赚钱,实现 Play-to-Earn(简称 P2E)的商业模式。

第一个真正出圈吸引了大规模玩家的 GameFi 项目是 Axie Infinity,高峰时期玩家在游戏里每个月赚到的代币价值上千美元,这个数额已经高于许多发展中国家普通居民的工作收入,所以也在东南亚地区掀起链游打金浪潮,大量从未听说过区块链的人开始全职玩游戏赚钱。但 Axie 游戏本身的可玩性不太好,后来也充斥着机器人用户,真正参与进去当游戏玩的人不多。

这里重点讲另一个项目 STEPN。STEPN 是第一个吸引了大量圈外用户的 Move-to-Earn NFT 游戏。玩家需要穿着 NFT 运动鞋在户外步行或跑步来赚取代币。基本流程:

  1. 用户使用钱包登录,花费一些币购买 NFT 运动鞋。
  2. 运动鞋有不同的等级和属性值,属性值关系到代币收益、耐久度、运气等,可以升级和增强属性。
  3. 开启跑步模式,在指定的速度区间移动即可赚取代币奖励。
  4. 鞋子升级、增强、修复都需要消耗代币。两双鞋还可以进行繁殖产生新的鞋。

STEPN 的赚钱方式:

  • 每日运动赚取代币。
  • 鞋子的价格会随行情和游戏规则改动变化,炒鞋。
  • 繁殖新鞋后出售。

STEPN 高峰期由于币价上涨,三四周即可通过跑步回本。与其他纯游戏的 GameFi 不同,跑步会带来生活方式的改变和运动的愉悦,具有现实意义,经济奖励的存在又可以增加用户留存。

GameFi 的代币之所以产生市场价值是因为有持续不断的新用户入场购买,如果项目吸引力降低,新用户不足买盘变弱,往往会产生代币价格下跌、更多玩家离场的死亡螺旋。这也是 GameFi 被部分传统游戏行业人士批评的原因:游戏本身创造的价值很低,收益来自新用户的接盘,经济模型难以持续。

为什么 token 如此重要

token 是一种所有权的象征,代表某种权益,体现共识,并且可流通,具有经济价值。公链需要 token 维持自身运转,各种 xxFi 需要 token 构建激励系统和经济模型(tokenomics),区块链和 token 代表的是一种更直接的经济系统,被绑定在协议层。「有史以来,我们第一次把经济系统嵌入到了互联网里」。

个人在这一行有哪些赚钱方式

  • 炒币炒 NFT(高风险)
  • DeFi
  • 套利
  • 参加 IEO/IDO 获取低价筹码(类似港股打新)
  • 交互刷空投(不推荐)
  • 参加项目方的测试网,等待空投奖励
  • 矿机挖矿(小规模就别折腾了)
  • 一级市场投资(需要有关系拿额度)
  • 为项目或 DAO 做贡献,领工资
  • 玩各种 x-to-earn
  • 成为 KOL,项目方送福利
  • 科学家,用技术手段抢占先机

技术从业者可以做的项目和创业方向

  • 交易平台:中心化交易所/DeFi/NFT 交易平台
  • 公链、Layer 2 扩容、跨链桥
  • 硬件钱包/软件钱包(not your keys, not your coins)
  • 数据服务:提取、检索链上数据,挖掘价值
  • 基础设施:节点服务/区块浏览器/定制化公链解决方案/隐私网络
  • 区块链安全:反洗钱/安全审计/非法资金追踪

没提到的

DeFi 的无常损失 (Impermanence Loss)

DAO

元宇宙:概念宏大,技术还跟不上

SocialFi:暂无出圈产品

总结

加密货币行业整体上还处于初期阶段,大概是 1998 年的互联网,各种基础设施不成熟,用户心智未形成,许多做出来的东西好像都没啥用,但这种状态也给了所有人平等参与的机会,其他行业的既得利益者并不存在压倒性优势。个体可以通过自己的勤奋和认知找到投资机会,建设者们可以在这片蓝海里尽情发挥,用户有能力回收本该属于自己的价值,目前的 Crypto 市场正在从偏丛林社会的金融市场向自由市场(有非常强的制度建设和有效监管)发展。简单来看区块链是全球共享的一张大表,但这张表提供了大量机会和可能性。不管认不认同 Web3 的理念,我们至少可以尝试一下 Web2 跑马圈地收税之外的另一个选项。

风险提示

本文所有内容均非投资建议,对项目的评价均为作者个人主观看法。

加密货币行业监管还未到位,行情波动巨大,充斥着骗子和陷阱。每一种赚钱方式背后都有十种亏钱方式,参与需谨慎,勿赌博勿上头。

任何情况下都不要在网页上填写、手机截图、网络发送、泄露自己的私钥、助记词。

本文参考资料

比特币白皮书 https://github.com/xiaolai/bitcoin-whitepaper-chinese-translation

区块链教程 https://www.liaoxuefeng.com/wiki/1207298049439968

How does a Merkle-Patricia-trie tree work? https://ethereum.stackexchange.com/questions/6415/eli5-how-does-a-merkle-patricia-trie-tree-work

互联网同行如何入局web3 https://mirror.xyz/0xE901d6E73ed520a27cE01a07f938181973cFE098/PvZcy0U0UqTE5DtUSGxIrIStxviclNP3l6bbTVfMl14

The Architecture of a Web 3.0 application https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application

DeFi是什么? https://zhuanlan.zhihu.com/p/377856331

孟岩:为何智能合约没能成为区块链的杀手级应用? https://www.defidaonews.com/article/6737332

关于区块链和 Web3 的文章列表 - 王建硕 https://jianshuo.substack.com/p/-web3-?s=r

探索以太坊扩容之路:哪个方案才是未来? https://mp.weixin.qq.com/s/VLebxbNZN3rGM8EJmBx0ig

Layer 2竞争格局分析: 生态资源和L2性能是核心竞争力 https://mirror.xyz/0xee0FF4092C52696e2cCA7977A0C00ef831cE5bEb/37rH6OP8D4aSCIBEq3zvp5p9hgOsHdzLJxYTEd1t9rM

《一本书读懂Web3.0》 https://item.jd.com/13715854.html

推荐的学习资源

《区块链技术与应用》公开课

https://www.bilibili.com/video/BV1Vt411X7JF

肖臻老师是北大教授,搞科研的人讲概念和细节就非常严谨完整。这门课是针对研究生开设的,有引导式提问,非常适合有一点技术基础但不懂区块链的同学学习。尽管课程在 2018 年录制,但讲述的是比特币和以太坊的基本原理和设计思路,现在看也没有过时。20 小时几天时间就可以刷完。

Mirror Curator DAO

https://mcdao.mirror.xyz/

由一群热爱 Mirror 的用户发起的 DAO,以周报形式每周整理汇总 Mirror 上的优质中英文文章。适合跟踪行业热点、从繁多信息流里提取优质内容。

以太坊简易指南

https://www.ethereum.cn/Technology/a-simpler-guide-to-ethereum

适合对以太坊不太熟悉的新用户学习如何快速上手使用。

maxdeath

https://www.zhihu.com/people/maxdeath/posts

maxdeath 是一位区块链博士后,在知乎发布的文章很有水平,适合用来快速理解概念。

OneKey 帮助中心-区块链知识科普

https://help.onekey.so/hc/zh-cn/sections/360000423415-%E5%8C%BA%E5%9D%97%E9%93%BE%E7%9F%A5%E8%AF%86%E7%A7%91%E6%99%AE

OneKey 是国内一家优秀的硬件钱包提供商,官网有完善专业的科普文档。

Finematics

https://finematics.com/

DeFi 视频+文章科普

Vitalik Buterin's website

https://vitalik.ca/

Vitalik Buterin 个人博客。这个就不属于科普了,有以太坊的改进思路,也有社会哲学层面的思考。

Going Bankless: The Ultimate Guide

https://newsletter.banklesshq.com/p/-guide-1-starting-with-bankless

Bankless DAO 当前 DAO 领域的标杆,为新人准备了丰富的指引文档来了解加密货币生态。

致谢

本文构建过程中得到 junjiahhh, zengjiajun_eth, Zhbyak47, taresky 几位老师的指导和完善,特别感谢。

About

工程师视角的 Web3 初探

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published