1. 区块链简介

什么是区块链?

你可能听说过区块链被描述为“数字货币”或“互联网的未来”。这些解释虽然令人兴奋,但往往完全没有抓住重点。

从根本上讲,区块链是一个分布式系统:一组计算机网络,它们必须在不互相信任的情况下就共享数据达成一致。

本课程不讨论炒作,而是从基本原理讲解区块链:它解决的分布式系统问题、解决方法以及权衡的重要性。


分布式系统的核心挑战

大多数人认为,从一台计算机扩展到多台计算机只是“更多相同的事情”。这就像认为协调一个人和协调分布在不同时区、可能并不总是能联系上的一千人是一样的。

当你在单台计算机上编写代码时,你生活在一个可预测的宇宙中:

  • 操作要么立即成功,要么立即失败。
  • 数据在读取之间不会神秘地改变。
  • 时间始终向前推进。
  • 当你保存某些内容时,它确实被保存了。

银行转账的例子

让我们以一个简单的银行系统为例。在这种情况下,将 100 美元从 Alice 转给 Bob 是非常容易的:

python
def transfer(from_account, to_account, amount): if from_account.balance >= amount: from_account.balance -= amount to_account.balance += amount return "Transfer successful" return "Insufficient funds"

这在单机环境下运行得非常完美……直到你需要扩展。

扩展的噩梦

当你的银行业务增长到单台计算机无法处理的程度时,你必须将账户分布到不同的服务器上。

  • 服务器 A:持有 Alice 的账户
  • 服务器 B:持有 Bob 的账户

现在,Alice 想要向 Bob 转账 100 美元。这个简单的操作变成了一个跨网络的协议:

  1. 服务器 A 检查 Alice 的余额。
  2. 服务器 A 扣除 100 美元。
  3. 服务器 A 通知服务器 B 增加 100 美元。

可能出错的地方:

  • 网络分区:服务器 A 扣款了,但在通知服务器 B 之前网络断了。钱“消失”了。
  • 服务器崩溃:服务器 B 收到了消息但在写入硬盘前崩溃了。
  • 竞争条件:Alice 同时向 Bob 和 Charlie 发起转账,利用网络延迟实现“双重支付”。

这就是分布式系统之所以困难的原因:你必须在不可靠的网络上构建可靠的系统。

JS JavaScript Playground
LIVE COMPILATION
Initialize Editor...

分布式银行模拟器

SERVER A
$1000
ONLINE
SERVER B
$500
ONLINE
系统日志
> 系统就绪...