Skip to content

Commit

Permalink
feat: EnableView for Web3 Presentation
Browse files Browse the repository at this point in the history
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
Laisky committed Jun 4, 2024
1 parent 58954f2 commit 861d17c
Showing 1 changed file with 355 additions and 0 deletions.
355 changes: 355 additions & 0 deletions slides/web3-101.ipynb
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
}

0 comments on commit 861d17c

Please sign in to comment.