01 · 区块链是什么
本知识库第一篇。读完应能用一句话向外行解释区块链,并说清它解决了什么、 核心机制是哪几块、有哪些词必须先认识。结构见
README.md§1。
0. 一句话本质
区块链 = 一本所有人共同维护、谁也无法偷改、不需要任何中间人来担保的公共账本。
记住这一句,下面全部是它的展开。
1. 怎么产生的:它到底解决什么问题
区块链不是"先有技术再找用途",是先有一个 30 年没解过的难题,2008 年被一份白皮书解开。
难题:互不信任的人之间,怎么记一本谁也不能赖账的账?
设想:你和一群陌生人想共用一本记账本(谁给谁转了多少钱)。
- 如果账本放在某一个人手里(银行模式)——你得无条件信任这个人不改账、不跑路、不被黑。历史上跨链桥被盗几十亿美元,传统金融也有挪用账目的案例。这就是"中心化信任"风险。
- 如果每个人各记一本——一旦对账不一致,谁说了算?没有裁判。
- 最致命的是双花问题(Double Spend):数字信息可以无限复制。我把同一笔"1 个币"同时发给 A 和 B,谁认账?现实货币靠物理唯一性(一张钞票只能给一个人)防双花;纯数字的钱在区块链之前没有人能在无中间人的情况下解决这个。
解法:2008 年比特币白皮书
2008 金融危机背景下,化名中本聪(Satoshi Nakamoto)的人发布《Bitcoin: A Peer-to-Peer Electronic Cash System》,第一次给出不靠任何中心机构、也能防双花、也能让互不信任者达成一致账本的方案。
它的组合拳(后面逐条展开):
- 账本所有人各存一份完整副本(去中心化,没有"那个能改账的人")。
- 用密码学把每条记录锁死,改一个字全链对不上(不可篡改)。
- 用共识机制决定"下一页由谁来写",且写错会被全网拒绝(无需信任也能一致)。
→ "区块链"是这套方案的数据结构名字;"比特币"是它第一个应用。后来以太坊把它从"只能记转账"升级成"能跑程序"(智能合约),才有了我们项目里的 DeFi/MEV。
2. 它本质在做的"那一件事"
剥到底,区块链只做一件事:
在一群互不信任、且没有裁判的参与者之间,对"账本现在长什么样"达成一个谁也改不动的共识。
"账本"可以记:
- 谁有多少币(比特币)
- 谁有多少币 + 一堆程序的当前状态(以太坊:余额 + 智能合约里的数据)
其余所有概念(区块、哈希、共识、Gas、合约)都是为保证这一件事成立而存在的零件。学的时候始终问:"这个零件是为'谁也改不动的共识'解决哪一环?"
3. 类比:从"一家银行"到"全村同步的账本"(用你熟悉的支付系统视角)
| 传统银行 | 区块链 | |
|---|---|---|
| 账本在哪 | 银行的中心数据库(一份) | 全网每个节点各一份完整副本 |
| 谁能改账 | 银行(你得信任它) | 没有人能单方面改——改了和别人对不上 |
| 谁来记新账 | 银行职员 | 共识机制选出的出块者(谁都可以争) |
| 防赖账靠什么 | 法律 + 银行信誉 | 密码学 + 全网验证(不靠信誉) |
| 出错/作恶 | 内部可改、可冻结、可挪用 | 单点作恶会被其余全网否决 |
| 对账 | 你信银行对账单 | 你自己就能验证整本账 |
最贴切的一个画面:
一个村子,没有银行。村中央广场挂着一本巨大的账本,全村每个人家里都有一本一模一样的复印件,实时同步。 任何一笔转账要生效,必须:①付款人用只有他有的私章签字(数字签名);②全村按规则选出的某个人把这笔记到账本新的一页(出块);③这一页被装订进账本,且用一种特殊胶水把这页和前一页死死粘住,撕掉重写就会留下全村可见的破绽(哈希链式结构)。 想偷改三天前某一页?你得把那页之后所有页全部重粘一遍,还要快过全村其他人继续往后粘的速度——在足够大的村子里,算力上做不到。
这个村庄账本,就是区块链。后面每个术语,都能在这个画面里找到对应物。
4. 核心关键点(5 块,缺一不可)
-
去中心化账本(Distributed Ledger) 账本不在某机构手里,而是全网每个节点各存完整一份。没有"那个能改账的人"=没有单点信任、没有单点故障。
-
密码学保证不可篡改(Cryptography) 每条交易用付款人私钥数字签名(证明是本人、且内容没被改);每个区块带上一区块内容的哈希指纹,环环相扣。改任何历史一个字节 → 该块哈希变 → 后面全部对不上 → 全网立刻识别。详见
02(待写)、03(待写)。 -
共识机制决定"谁来记下一页"(Consensus) 没有裁判,怎么避免人人抢着记、记的还不一样?用 PoW(拼算力)或 PoS(拼质押)选出本轮记账人,并让"跟着最长/最重的链"成为所有人自发的最优选择。这也是 MEV 的根源——记账人有"排哪笔交易在前"的权力。详见
04(待写)。 -
区块 + 链式结构(Block + Chain) 交易不是一笔一笔上链,是打包成"区块"(账本的一页),每页头部写着上一页的哈希指纹,串成一条只能往后加、不能从中间改的链。"区块链"三个字就是这个结构。
-
状态机(State Machine)—— 以太坊的关键升级 比特币的账本只记"谁有多少币"。以太坊把账本升级成"谁有多少币 + 所有智能合约里变量的当前值"。每笔交易是一次状态转移:
旧状态 + 交易 → 新状态,全网用同一套规则(EVM)算,算出来必须一致。我们项目里 Uniswap 池子的 reserves、Aave 里谁欠多少债,都是这个"状态"的一部分。详见06–08(待写)。
5. 必须先认识的前置名词(带类比的小词典)
按"村庄账本"画面给每个词一个直觉锚点。精确定义放在后续专题,这里只求听到不懵。
| 名词 | 一句话 | 村庄类比 |
|---|---|---|
| 哈希 (Hash) | 把任意数据压成一段定长指纹;改 1 字节指纹全变;不能反推原文 | 一页内容的"防伪封条",内容动一下封条就碎 |
| 私钥 (Private Key) | 只有你知道的一串秘密数字,用来签字证明"是我" | 只有你有的私章 + 它的唯一性 |
| 公钥 / 地址 (Address) | 由私钥推出、可公开的收款标识 | 你贴在账本上的收款户名(别人能往里打钱,但动不了里面的钱) |
| 数字签名 (Signature) | 用私钥对交易签字,全网用你公钥验真,且签完内容改不了 | 私章盖在转账单上,全村能验是不是你盖的、单子有没有被改 |
| 交易 (Transaction) | 一次状态变更请求(转账 / 调合约) | 一张待入账的转账单 |
| 区块 (Block) | 一批交易打包成的"账本一页",带上一页哈希 | 账本的一页 |
| 节点 (Node) | 存着完整账本副本、按规则验证交易的一台机器 | 家里存着账本复印件、会按规矩核账的村民 |
| 出块者 (Validator/Miner) | 本轮被共识选中、负责写新一页的人 | 这一页的执笔人 |
| 共识 (Consensus) | 让全网对"账本现状"自发一致的规则 | 全村都认"最长那本"是真账 |
| Gas | 在以太坊上做任何操作要付的"计算手续费" | 让执笔人帮你记账、跑程序的工本费 |
| 钱包 (Wallet) | 管私钥、帮你签名发交易的软件(不"存"币,币在链上) | 保管你私章的盒子,不是钱本身 |
| EOA / 合约账户 | EOA=私钥控制的普通地址;合约账户=一段部署在链上的程序 | 普通村民户头 / 一台贴在墙上的自动售货机 |
| 智能合约 (Smart Contract) | 部署在链上、人人可调用、自动执行、改不了的程序 | 墙上的自动售货机:投币即吐货,没人能私下改规则 |
| EVM | 以太坊的"统一计算器",全网节点用它跑合约保证结果一致 | 全村共用同一型号计算器,谁算都一个答案 |
| 去中心化 (Decentralization) | 没有单一控制方;规则由代码 + 全网共识执行 | 没有村长能私自改账 |
看到这些词先回到村庄画面定位它,再深究。02–08 篇会逐个上精确定义。
6. 一笔转账的完整一生(端到端走一遍)
以"你给朋友转 100 USDC"为例,把上面零件串起来:
- 发起:你的钱包构造一笔交易(从你的地址 → 朋友地址,金额 100 USDC,附 Gas 费)。
- 签名:钱包用你的私钥给这笔交易数字签名。没有私钥谁也签不出——这就是"所有权"的全部含义:谁掌握私钥,谁就拥有那地址里的资产(所以私钥泄露 = 资产没了,无人能追回)。
- 广播 → mempool:交易发到全网,进入"待打包池"(mempool,账本"待入账筐")。此刻它公开可见但还没生效——MEV 机器人正是盯这个筐(见
14code/.../watcher/src/mempool.ts)。 - 打包出块:本轮被共识选中的出块者,从筐里挑一批交易(挑哪些、排什么顺序由他定 → MEV 根源),算出新状态,打包成一个区块,区块头写上一区块的哈希。
- 验证 + 上链:新区块广播给全网,每个节点用同一套规则(EVM)独立重算一遍——结果一致才接受,并把这页装订进自己那本账。从此这笔转账成为历史,改它要重写其后所有区块且跑赢全网,实际做不到 → 不可篡改。
- 确认:后面每多一个区块叠上去,这笔交易被推翻的可能性指数级趋零("N 个确认"就是这个意思)。
整个过程没有银行参与,靠的全是密码学 + 共识 + 全网各自验证。这就是"无需信任(trustless)"的实际含义——不是"不用信任谁",是"不需要信任任何特定一方,因为规则由全网强制执行"。
7. 常见误区(先纠正,省得后面绕弯)
| 误区 | 实情 |
|---|---|
| "币存在钱包里" | 币是账本上的一个数字。钱包只存私钥(控制权)。钱包删了、币还在链上;私钥丢了、币永远取不出 |
| "区块链匿名" | 是假名不是匿名。地址不直接绑身份,但全部流水永久公开可查——我们就靠这个 5 分钟核查了 0x6bdc / 0x65A8 |
| "区块链不可篡改 = 绝对安全" | 不可篡改只保证"历史账改不动"。不保证你不被钓鱼骗走私钥、不保证合约没 bug、不保证你不被 MEV 夹。安全边界要分清 |
| "去中心化 = 没人能作恶" | 是"单点作恶会被全网否决"。但算力/质押高度集中、出块者排序权(MEV)、预言机喂价等仍是现实中的权力点 |
| "交易立刻到账" | 要等出块 + 若干确认。以太坊约 12 秒一块。这正是 Phase 5 我们撞过的:HTTP 轮询比出块慢,看到时已上链 |
| "链上看到价差就能套" | 价差被有基础设施的盈利运营者毫秒级吃掉(见 docs 2026-05-19 自我更正)。看得到 ≠ 抢得到 |
8. 与本项目实践的对应
你不是从零学——下面这些你已经在代码里实际碰过,这篇补的是它们脚下的 why:
- 地址 / 签名 / 私钥 →
0x6bdc...(假)vs0x65A8...(真)链上实证;watcher里的Wallet签名 - mempool / 出块者排序权 →
code/phase4-onchain-basics/watcher/src/mempool.ts、Phase 5 backrun - 状态机 / EVM → 4 个合约 +
forge test --fork全在重放主网状态 - 不可篡改 / 确认延迟 → Phase 5 "HTTP 轮询比出块慢" 的根因就在 §6 第 5 步
- 无需信任 / 原子性 →
FlashLoanHelloWorld/Arbitrageur的require回滚 = 状态机"要么整体成立要么整体不发生"
→ 学完后续 02–17 篇,回头看这些代码会从"能跑"变成"知道每一行为什么这么写"。
9. 自检问题(答得出才算过这一篇)
- 用一句话向完全外行解释区块链是什么。
- 双花问题是什么?为什么它在 2008 年前没人能在无中间人下解决?
- "不可篡改"具体由哪两个机制共同保证?改一笔历史交易为什么实际做不到?
- "无需信任(trustless)"准确含义是什么?(不是"不用信任谁")
- 比特币账本和以太坊账本,本质差别是哪一点?
- 私钥、地址、钱包三者关系是什么?丢哪个等于资产没了?
- 为什么"出块者能决定交易顺序"是 MEV 的根源?(联系 §4.3 与 §6.4)
── Q&A / 更正记录区(按日期追加)──
规范见
README.md§0:讨论、质疑、反馈、纠错都按日期记这里, 永不抹掉错误轨迹。继承 docs 2026-05-19 自我更正的 evidence-first 基因。
-
(2026-05-19 建立。暂无 Q&A——后续围绕本篇的提问/质疑/更正在此累积。)
-
(2026-07-26) 问:要求"仔细科学且完善"地讲区块链,不要空洞类比,要覆盖密码学、记账、交易、合约、链五块。
答(整合 02/03/04/06/07 的技术细节,未更正本篇正文,是补一层更精确的整合视角):
先给一个不依赖比喻、可以直接验证的定义:区块链 = 一个由哈希指针链接、仅追加(append-only)的区块序列;每个区块里的交易由数字签名授权,经由确定性的状态转移函数(UTXO 规则或 EVM)更新一份可用 Merkle 根验证的全局状态;全网独立节点各自重放执行来验证,并通过某种带经济代价的共识规则(PoW 算力 / PoS 质押)决定唯一合法的下一区块——从而让互不信任、没有裁判的参与者对同一份状态达成一致,且事后篡改的代价随时间指数级上升。
-
密码学:哈希函数四个可验证性质——确定性(同输入必同输出)、固定长度输出、单向性/原像抗性(无法从输出反推输入)、抗碰撞性、雪崩效应(改 1 比特输出近乎全变)。区块链靠它做两件事:链式锚定(每块存上一块哈希,改一块则其后全部失效)+ Merkle Tree/Patricia Trie(O(log n) 证明某笔交易/某个值是否在集合里,不用下载全部数据)。非对称加密+数字签名(secp256k1 上的 ECDSA):私钥→公钥→地址单向不可逆(椭圆曲线离散对数难题);签名让任何人可用公钥+签名+消息验证"确实是私钥持有者签的、内容未被改",不需要知道私钥、不需要签名者在场——这才是 trustless 的准确含义:任何人可独立数学验证,不必依赖可信第三方,而非"没人验证"。三层组合成密码学承诺链:签名→Merkle Root 锚定进块→父哈希锚定进链,任一层改 1 比特都会让往上所有哈希对不上。
-
记账模型:UTXO 模型(比特币)——账本存"未花费输出"而非余额,余额是查询时现算的;防双花靠"同一 UTXO 不能被两笔交易同时消耗",节点直接拒绝后一笔。账户/状态机模型(以太坊)——每地址一个账户对象
{nonce, balance, storageRoot, codeHash},交易是显式状态转移σ' = Υ(σ, T)(Υ 即 EVM 规则),全局状态组织成一棵 Merkle Patricia Trie,stateRoot是这棵树的根——任何账户任何存储槽变了,根哈希就变。nonce防的是重放,不是双花本身——这点原文 §5 词典条目没细分,值得注意:双花在账户模型里靠"余额不能为负"这条状态转移规则约束,不是靠 nonce。 -
交易:完整字段
{nonce, gasPrice/maxFeePerGas, gasLimit, to, value, data, chainId, v,r,s};gasLimit×gasPrice是资源上限,图灵完备语言靠经济代价(gas 耗尽 revert)而非语言限制防无限循环;v,r,s让任何节点可用ecrecover恢复发送者公钥,不需要交易显式带发送者字段。六步生命周期:① 钱包本地签名(私钥不出本机)② 广播进 mempool(公开可见但未生效,MEV 窗口)③ 出块者排序+EVM 逐条执行 opcode(排序权是 MEV 根源)④ 打包成块、算出新 stateRoot ⑤ 每个节点独立重放执行验证(trustless 在执行层的落地:不信出块者算的结果,自己重算一遍)⑥ 后续区块叠加,回滚代价随确认数指数上升。 -
智能合约:确定性执行是全网独立验证的前提——合约不能读真实时钟、不能要随机数、不能主动发 HTTP,这正是需要预言机(外部数据必须以交易形式喂入链上)的根本原因;EVM"图灵完备但有界":允许任意循环递归,但每条指令耗 gas、gasLimit 硬上限,靠经济代价而非语言限制绕开停机问题在实际系统里的危害。
-
链结构:区块头关键字段
parentHash, stateRoot, transactionsRoot, receiptsRoot, timestamp, number+ PoW 的difficulty/nonce或 PoS 的 validator 签名证明;parentHash密码学锚定每个块和唯一前一个块——这是"链"的字面含义(单向链表,非任意图)。分叉时的选链规则:PoW 是累计工作量最大的链获胜(Nakamoto Consensus);PoS 是 fork-choice(如 LMD-GHOST)+ finality gadget(如 Casper FFG,两个 epoch 后"最终确定",比最长链更强的不可逆保证)。"不可篡改"是概率性/经济性安全(篡改需要反超全网算力/质押且重算全部后续区块的代价),不是绝对数学不可能——比原文 §7 误区表"不可篡改=绝对安全"那条说得更精确,是同一个道理的更严谨版本,不是原文错了。
拿掉任何一块,这套系统就塌:哈希链(防篡改)+ 数字签名(授权与所有权)+ 记账/状态模型(大家算的是同一件事)+ 共识规则(谁来写、写错被拒绝)+ 独立重放验证(不信出块者,自己验)——五块环环相扣,这也是为什么学习顺序密码学→区块结构→共识→账户模型→EVM→智能合约不能跳的原因。
完整原始记录见
../total/Q&A/2026-07-26.mdQ1。 -