从 App 到 dApp
你写了很多年 Android。App 里那些 Retrofit 请求最终都落到某台服务器上,那台服务器是某家公司的,数据库是它的,规则也是它定的。Web3 做的第一件事,就是把这台服务器抽走——然后问你:没有了它,你的代码还能跑吗?能。这一章我们把这套新范式,一项一项翻译成你熟悉的语言。
先说结论,免得你在术语里迷路:Web3 不是一种新框架,而是一种新的信任结构。你过去所有的架构决策,背后都默认了一个前提——「有一个我们都信任的中心」:客户端信任服务器,服务器信任数据库,大家信任云厂商不会篡改数据。Web3 把这个前提删掉了,换成「不信任任何单一方,但可以信任一套所有人都能验证的规则」。理解了这一句,后面 25 章都是它的展开。
一次网络请求,两种世界
想象你的 App 里有个「给朋友转账 10 块」的功能。在 Web2 里,它大致是这样的:
// 你的 App 把意图发给服务器,服务器说了算 val resp = api.transfer( from = "me", to = "alice", amount = 10 ) // 服务器内部:校验余额 → 改数据库两行 → 返回成功 // 你无法验证它真的改了,只能"相信"返回的 200
服务器是一个黑箱。它可能正确执行了,也可能记错账、可能被内部人改库、可能哪天公司倒闭连数据一起蒸发。你和 Alice 都只能选择相信运营方。在 Web3 里,同一件事长这样:
// 你在本地用私钥"签署"一个转账意图,广播给整个网络 tx = { to: alice, value: 10 } signed = sign(tx, myPrivateKey) // 只有你能签,谁都伪造不了 network.broadcast(signed) // 全球数千个节点各自独立地执行同一套规则: // 1. 验证签名确实来自你 // 2. 检查你余额 >= 10 // 3. 一致同意后,把结果写进那本"世界账本" // 结果是公开的、可验证的、没有任何单点能反悔
Web2 的服务器像一个 private 后端,你只拿得到它暴露的 API,内部实现和数据库你看不见也改不了。Web3 的智能合约更像一个开源、全网公证、且一旦发布就不能偷偷改动的 public 库:任何人都能读它的字节码,任何人都能调它的方法,而它的每一次状态变更都被永久记录、人人可查。你从「调用别人的私有服务」变成了「和一段公开、透明、自动执行的代码打交道」。
把架构词典翻译一遍
与其死记新名词,不如把它们挂到你已有的知识树上。下面这张表是这一整本书的「术语对照总表」,后面每一章都在给某一行补充细节。
| Web2 / Android 世界 | Web3 世界 | 关键差异 |
|---|---|---|
| REST API 后端服务器 | 智能合约(Smart Contract) | 代码公开、不可篡改、自动执行 |
| MySQL / Room 数据库 | 区块链状态(World State) | 全网复制、只能追加、人人可读 |
| Retrofit / OkHttp | JSON-RPC + viem/ethers | 请求发给节点而非某公司 |
| 账号密码 / OAuth | 公私钥对(钱包) | 你自己保管私钥,没有"找回密码" |
| 服务器机房 / 云 | 全球对等节点网络(P2P) | 没有中心,关不掉 |
| 调 API 免费,公司付服务器钱 | 每次写操作付 Gas 费 | 算力和存储明码标价 |
| 公司审核你的账号 | 无需许可(Permissionless) | 没人能封你,也没人给你兜底 |
| App 更新走应用商店 | 合约部署即"发布",地址即入口 | 升级要专门设计(见第 17 章) |
"去中心化"到底去掉了什么
这个词被滥用得厉害。精确地说,Web3 去掉的是三种中心化,而且它们可以分开谈:
- 架构去中心化:运行网络的机器分散在全球,没有哪台是"主服务器"。关掉任何一台,网络照跑。
- 政治去中心化:没有哪个个人或公司能单方面改规则、冻结你的资产、把你踢出去。
- 逻辑去中心化:注意——单个智能合约在逻辑上是中心化的(就是一段确定的代码),但它运行在架构与政治都去中心化的底座上。
这解释了一个常见困惑:"区块链不是去中心化吗,为什么一个合约有 bug 全网都遭殃?"因为逻辑层可以是中心的。去中心化保证的是没人能作弊地改结果,而不是"代码一定没 bug"。恰恰因为改不动,bug 才更致命——这也是为什么这本书专门有一章讲合约安全(第 16 章)。
去中心化的另一面是没有客服。转错地址,钱找不回;私钥泄露,资产被卷走没人赔;合约有漏洞,损失自负。Web2 里"联系客服冻结账户"这种兜底,在这里几乎不存在。自由和自负责任是同一枚硬币的两面——这一点越早内化越好。
那"dApp"是什么形状
dApp = decentralized application。它不是一个新的 App 类型,而是一种拆分方式。一个典型 dApp 的组成,用你熟悉的三层架构来看:
| 层 | Android App | dApp |
|---|---|---|
| 界面层 | Compose / XML 界面 | 网页前端或原生 App(照旧) |
| 业务逻辑 | 后端服务里的 Service 类 | 链上的智能合约 |
| 数据层 | 后端数据库 | 区块链状态 + 去中心化存储(如 IPFS) |
| 身份 | 登录态 / Token | 钱包签名 |
关键的洞察是:前端几乎不变。你依然写界面、发请求、处理响应。变的是「请求发给谁、由谁执行、由谁保管数据、用什么证明你是你」。所以对你这样一个有客户端经验的人,Web3 的学习曲线不在 UI,而在中间那层——合约、交易、密钥。这本书的重心也正在那里。
把 Web3 想成:你的后端被换成了一台全球共享、代码公开、没人能私自改动的"世界计算机",而你用一把私钥来证明身份、授权每一次操作。前端还是那个前端,数据库变成了一本谁都能查、谁都改不动的账本。接下来两章,我们先把这本账本(第 2 章)和这把钥匙(第 3 章)彻底拆开看清楚。
本章小结
- Web3 的内核是信任结构的转变:从"信任某个中心",变成"信任一套人人可验证的规则"。
- 智能合约 ≈ 公开、不可篡改、自动执行的后端;区块链状态 ≈ 全网复制、只能追加的数据库。
- 去中心化去掉的是架构和政治中心,不保证代码没 bug;它的代价是没有兜底、责任自负。
- dApp 拆分和三层架构同构,前端变化最小,难点在合约、交易与密钥这个中间层。