-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: EnableView for Web3 Presentation
Here is the summary: This commit is a significant update to the web3 presentation, focusing on blockchain technology and introducing key concepts. - Fix the presentation with slides and notes on blockchain technology, including single-chain lists and hash functions using Bitcoin as the base for the web3 presentation. - Major changes made to the slides/web3-101.ipynb file, with new slides and concepts presented. - Mainly, we updated the slides presentation for a better understanding of blockchain technology. The rest of the commit summary is mostly minor changes and README updates.
- Loading branch information
Showing
1 changed file
with
355 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,355 @@ | ||
{ | ||
"cells": [ | ||
{ | ||
"cell_type": "markdown", | ||
"id": "9b5f60e0", | ||
"metadata": { | ||
"slideshow": { | ||
"slide_type": "slide" | ||
} | ||
}, | ||
"source": [ | ||
"# 面向 Web2 工程师的 Web3 入门" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "10dd0fb9", | ||
"metadata": { | ||
"slideshow": { | ||
"slide_type": "subslide" | ||
} | ||
}, | ||
"source": [ | ||
"此文面向 Web2 工程师,介绍以区块链技术为核心的 Web3 相关知识。" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "dc67f941", | ||
"metadata": { | ||
"slideshow": { | ||
"slide_type": "slide" | ||
} | ||
}, | ||
"source": [ | ||
"## 区块链矿工\n", | ||
"\n", | ||
"Web3 世界言必称“去中心化、分布式、防篡改、抗审查”,其技术核心就是区块链(Blockchain)。\n", | ||
"\n", | ||
"区块链本身的技术原理很简单,身为技术人员,只需要掌握如下知识点:\n", | ||
"\n", | ||
"1. 单向链表: 每一个节点都有一个指向下一个节点的指针,新的节点会被加到链表的尾部。\n", | ||
"2. Hash: 一种将任意长度的数据映射为固定长度的数据的方法,可用于数据的校验。" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "78779b3f", | ||
"metadata": { | ||
"slideshow": { | ||
"slide_type": "subslide" | ||
} | ||
}, | ||
"source": [ | ||
"#### Merkle Tree\n", | ||
"\n", | ||
"Hash 虽然已经足以保证数据的完整性,但是当原始数据量较大时,任何更新和校验都需要重算整个数据的 Hash 值,这样效率很低。\n", | ||
"\n", | ||
"而 Merkle Tree 通过将原始数据切片,从而实现高效的部分校验和更新。\n", | ||
"\n", | ||
"![](https://s3.laisky.com/uploads/2024/06/Merkle%20tree.png)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "5a3f7586", | ||
"metadata": { | ||
"slideshow": { | ||
"slide_type": "subslide" | ||
} | ||
}, | ||
"source": [ | ||
"好了,你已经足够了解区块链了😂\n", | ||
"\n", | ||
"![](https://s3.laisky.com/uploads/2024/05/What-Is-Blockchain-Infographic.jpg)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "fa8a4df4", | ||
"metadata": { | ||
"slideshow": { | ||
"slide_type": "subslide" | ||
} | ||
}, | ||
"source": [ | ||
"### inside BTC\n", | ||
"\n", | ||
"说起取款链很多人第一反应都是 Bitcoin。Bitcoin 是一种数字货币,而数字货币的具体实现就是:交易。\n", | ||
"\n", | ||
"而这也正是区块链上每一个区块的核心:存储交易记录。" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "c15d8fa9", | ||
"metadata": { | ||
"slideshow": { | ||
"slide_type": "subslide" | ||
} | ||
}, | ||
"source": [ | ||
"![](https://s3.laisky.com/uploads/2024/05/bitcoin_block_overview.jpeg)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "cf4a7306", | ||
"metadata": { | ||
"slideshow": { | ||
"slide_type": "subslide" | ||
} | ||
}, | ||
"source": [ | ||
"### 矿工与交易者\n", | ||
"\n", | ||
"Web3 和 Web2 世界最大的区别,就是 Web3 中并不会有一个中心化的服务器负责运行整个网络。\n", | ||
"\n", | ||
"Web3 的网络,以区中心分布式节点的方式,运行于世界各地。负责运行这些节点的,就是矿工。\n", | ||
"\n", | ||
"矿工的核心职责,除了维持网络的正常运行和通讯外,最重要的就是尽快响应交易者发来的交易请求,将其打包为新的区块,添加到区块链头部。" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "09323eaa", | ||
"metadata": { | ||
"slideshow": { | ||
"slide_type": "subslide" | ||
} | ||
}, | ||
"source": [ | ||
"### Network Protocol\n", | ||
"\n", | ||
"每一个矿工运行的都是相同的代码,他们互相间是完全对等的(此处暂不考虑质押的情形)。\n", | ||
"矿工们所运行的同质化的代码,也就是这个区块链网络的 Protocol。\n", | ||
"\n", | ||
"这个 Protocol 中会详细地定义如何处理交易、如何将交易打包为区块、如何广播区块、如何校验区块、以及如何激励矿工。\n", | ||
"\n", | ||
"比如 BTC 的 protocol 定义,矿工可以在新生成的区块中,通过创建 coinbase trasaction 为自己的账户凭空转入一笔 BTC,这也就是人们俗称的“挖到矿了”。" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "d3a2cf3b", | ||
"metadata": { | ||
"slideshow": { | ||
"slide_type": "subslide" | ||
}, | ||
"vscode": { | ||
"languageId": "plaintext" | ||
} | ||
}, | ||
"source": [ | ||
"![](https://s3.laisky.com/uploads/2024/06/coinbase.png)" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "c5ab46e4", | ||
"metadata": { | ||
"slideshow": { | ||
"slide_type": "subslide" | ||
} | ||
}, | ||
"source": [ | ||
"### 矿工们的竞争\n", | ||
"\n", | ||
"为了尽可能获取更多的利益,矿工们都希望区块链网络能够接受自己的区块作为新的区块链头部。\n", | ||
"\n", | ||
"所以矿工尽可能快和多的打包交易,生成新的区块,然后将这个区块尽可能广的散播出去,如果这个区块被广为接受成为取款链头部的新区块,这名矿工就可以获取挖出新区块所附带的奖励。\n", | ||
"\n", | ||
"当某一个矿工接收到其他矿工发来的区块时,它会根据 Protocol 的规则校验这个区块,如果校验通过,那么它知道自己在本轮竞争中已经落后了。它最明智的选择就是立即停止当前的工作,将收到的区块添加到头部,同时尽最大可能将这个区块广播出去,然后开始新一轮的竞争。" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "abc91313", | ||
"metadata": { | ||
"slideshow": { | ||
"slide_type": "subslide" | ||
} | ||
}, | ||
"source": [ | ||
"### 分叉\n", | ||
"\n", | ||
"每个矿工都在自顾自的生成自己的区块,然后将其广播出去。即时所有的矿工都是诚实的,由于网络的延迟,还是有可能在不同的区域,有不同的区块都被各自隔阂的矿工们接受成为了新的区块链头部。此时,我们就称网络出现了分叉(Fork)。\n", | ||
"\n", | ||
"这种情况类似于分布式系统中的脑裂(Split Brain)。这种情况不会持续太久,对区块链历史存在歧义的矿工终将相遇,根据 BTC Protocol 的规定,历史最长的链将被认为是正确的链,其他的分叉会被抛弃。那些不幸选择了错误分叉的矿工,相当于白白浪费了自己的算力。" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "6edcf427", | ||
"metadata": { | ||
"slideshow": { | ||
"slide_type": "subslide" | ||
} | ||
}, | ||
"source": [ | ||
"### PoW\n", | ||
"\n", | ||
"既然每生成一个新区块都可以给自己发奖励,那么矿工们肯定会倾向于疯狂生成新的区块。\n", | ||
"\n", | ||
"在 BTC 的协议中也考虑到了这一点,它通过调整挖矿 PoW 的难度,来让区块的生成速率保持在 10 分钟一个。" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "a85657ca", | ||
"metadata": { | ||
"slideshow": { | ||
"slide_type": "subslide" | ||
} | ||
}, | ||
"source": [ | ||
"1992 年的论文 'Pricing via Processing or Combatting Junk Mail' 最早提及了 PoW 的思想。\n", | ||
"\n", | ||
"PoW 的想法最早被应用于反垃圾邮件领域,简而言之,要想保持匿名性的同时防止滥用,最简单的方式就提高发送者的成本。\n", | ||
"\n", | ||
"比如我要求每个发信者,必须在邮件正文以外,再提供一个 nonce 值。且这个 nonce 值需要满足,hash(content + nonce) 的前缀有 N 个 0。\n", | ||
"\n", | ||
"这样,通过约定 N 的大小,就可以控制发送邮件的成本,从而防止滥用。" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "593d7e3b", | ||
"metadata": { | ||
"slideshow": { | ||
"slide_type": "subslide" | ||
} | ||
}, | ||
"source": [ | ||
"在 BTC 的每一个区块的 header 中,就存在这么一个 nonce 值。矿工们通过生成这个 nonce 值,使得整个区块的 hash 值满足一定的条件,从而使这个区块能够通过其他节点的校验。\n", | ||
"\n", | ||
"所以 BTC 中的每一个区块,都是在当时历史条件下,一定量算力(十分钟)的证明。前文提到遇到分叉时会选择历史最长的链,这句话其实不正确,准确的说,是选择历史算力最大的链。" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "69e7af86", | ||
"metadata": { | ||
"slideshow": { | ||
"slide_type": "subslide" | ||
}, | ||
"vscode": { | ||
"languageId": "plaintext" | ||
} | ||
}, | ||
"source": [ | ||
"#### 51% Attack\n", | ||
"\n", | ||
"通过 PoW 和基于哈希的链表,区块链提供了一种去中心化的信任机制。\n", | ||
"\n", | ||
"但其也不是完全可靠的,如果有人控制了超过全网 51% 的算力,那么他就可以生成任意的区块,并且让这个区块成为网络中的最长链,从而迫使其他节点接受这个链。" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "61a57c83", | ||
"metadata": { | ||
"slideshow": { | ||
"slide_type": "subslide" | ||
}, | ||
"vscode": { | ||
"languageId": "plaintext" | ||
} | ||
}, | ||
"source": [ | ||
"### 共识与拜占庭问题\n", | ||
"\n", | ||
"在 Web2 领域,可以使用 RAFT 协议可以用来解决分布式共识。RAFT 的核心在于选主,只有 leader 可以写入数据。而各个节点参与选主的依据,就是自己所持有的数据长度和 term 的大小。\n", | ||
"\n", | ||
"但是 Web2 领域面临的是非拜占庭问题,主要的问题来自于网络的不可靠。而 Web3 领域面临的是拜占庭问题,即每一个节点都可能是恶意的,会提供假数据。\n", | ||
"\n", | ||
"所以无论是 BTC 还是 Ethereum,生成新区块前不需要选主,而是每个节点各自生成新区块,然后通过竞争去抢占合并入链的机会。" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "d5b76808", | ||
"metadata": { | ||
"slideshow": { | ||
"slide_type": "subslide" | ||
} | ||
}, | ||
"source": [ | ||
"### 虚假的分布式与吞吐瓶颈\n", | ||
"\n", | ||
"虽然区块链到处吹嘘去中心化分布式,尤其 Ethereum 还经常自称世界计算机。但实际上,从技术的角度来说,目前的主流区块链的计算能力是很原始和低下的。\n", | ||
"\n", | ||
"虽然每一个节点都是分布式的并行运算,但是它们都是在竞争唯一一个区块上链的份额。所以从最终的链的角度来看,根本不存在任何的并行,有的只是完全串行化的交易记录。\n", | ||
"\n", | ||
"也就是说,目前的区块链网络,无论有多少节点在运行,其真实的计算能力,只有一个独占的线程。而且这个线程没有任何并发,没有任何形式的资源竞争,只有完全序列化的计算。" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "39bedaca", | ||
"metadata": { | ||
"slideshow": { | ||
"slide_type": "subslide" | ||
} | ||
}, | ||
"source": [ | ||
"<video width=\"960\" height=\"540\" controls>\n", | ||
" <source src=\"https://s3.laisky.com/uploads/2024/06/The%20hyper%20parallel%20computer%20launches%20right%20now.mp4\" type=\"video/mp4\">\n", | ||
"Your browser does not support the video tag.\n", | ||
"</video>" | ||
] | ||
}, | ||
{ | ||
"cell_type": "markdown", | ||
"id": "da376b6a", | ||
"metadata": { | ||
"slideshow": { | ||
"slide_type": "slide" | ||
}, | ||
"vscode": { | ||
"languageId": "plaintext" | ||
} | ||
}, | ||
"source": [ | ||
"## 钱包与交易者\n", | ||
"\n", | ||
"前文谈论的都是较为底层的 blockchain network protocol 和矿工。\n", | ||
"\n", | ||
"而大部分用户实际上是不需要和这些底层的东西打交道的。每一个 blockchain network,我们称之为 Layer-1 chain,都会定义至少一种 token,用户设立激励机制,维持网络的运转。比如 Bitcoin 网络的 BTC,Ethereum 网络的 ETH。" | ||
] | ||
} | ||
], | ||
"metadata": { | ||
"celltoolbar": "Slideshow", | ||
"kernelspec": { | ||
"display_name": "Python 3 (ipykernel)", | ||
"language": "python", | ||
"name": "python3" | ||
}, | ||
"language_info": { | ||
"codemirror_mode": { | ||
"name": "ipython", | ||
"version": 3 | ||
}, | ||
"file_extension": ".py", | ||
"mimetype": "text/x-python", | ||
"name": "python", | ||
"nbconvert_exporter": "python", | ||
"pygments_lexer": "ipython3", | ||
"version": "3.10.0" | ||
} | ||
}, | ||
"nbformat": 4, | ||
"nbformat_minor": 5 | ||
} |