File tree 6 files changed +239
-0
lines changed
6 files changed +239
-0
lines changed Original file line number Diff line number Diff line change
1
+ ## 数据库的概述
2
+
3
+ 数据库是一个有组织的数据集合,旨在高效地存储、管理和检索信息。它们广泛应用于各种应用程序中,包括企业管理、在线交易、社交媒体等。数据库系统不仅提供数据的存储,还提供数据的操作和管理功能,确保数据的完整性、安全性和一致性。
4
+
5
+ ### 数据库的类型
6
+
7
+ 数据库可以根据不同的标准进行分类,主要包括以下几种类型:
8
+
9
+ 1 . ** 关系型数据库(RDBMS)** :数据以表格形式存储,表与表之间通过外键关联。常见的关系型数据库有 MySQL、PostgreSQL 和 Oracle 等。关系型数据库使用 SQL(结构化查询语言)进行数据操作。
10
+
11
+ 2 . ** 非关系型数据库(NoSQL)** :数据存储方式多样,包括文档型、键值型、列族型和图形型等。常见的 NoSQL 数据库有 MongoDB、Cassandra 和 Redis 等。NoSQL 数据库通常用于处理大规模数据和高并发请求。
12
+
13
+ 3 . ** 分布式数据库** :数据分散存储在多个物理位置,提供更高的可用性和容错能力。分布式数据库可以是关系型或非关系型的,常见的例子包括 Google Spanner 和 Amazon DynamoDB。
14
+
15
+ ### 数据库的基本机制
16
+
17
+ 数据库的实现机制主要包括以下几个核心组成部分:
18
+
19
+ 1 . ** 数据存储** :数据库使用文件系统或专门的存储引擎来保存数据。关系型数据库通常使用页(page)作为基本存储单位,而 NoSQL 数据库可能使用文档或对象。
20
+
21
+ 2 . ** 索引** :索引是一种数据结构,用于加速数据检索。通过创建索引,数据库可以在不扫描整个表的情况下快速定位所需的数据。常见的索引类型包括 B 树索引、哈希索引和全文索引。
22
+
23
+ 3 . ** 查询处理** :数据库管理系统(DBMS)通过解析 SQL 查询,生成查询计划,并执行该计划以检索或修改数据。查询优化器是该过程的关键组件,负责选择最优的查询执行路径。
24
+
25
+ 4 . ** 事务管理** :数据库支持事务以确保数据的一致性和完整性。事务具有原子性、一致性、隔离性和持久性(ACID)特性,确保即使在系统崩溃或故障的情况下,数据也不会处于不一致状态。
26
+
27
+ 5 . ** 并发控制** :多个用户同时访问数据库时,需确保数据的完整性和一致性。数据库通过锁机制、时间戳或多版本并发控制(MVCC)来管理并发访问。
28
+
29
+ ### 数据库的安全性
30
+
31
+ 数据库的安全性至关重要,涉及以下几个方面:
32
+
33
+ 1 . ** 访问控制** :通过用户身份验证和授权,确保只有经过授权的用户才能访问特定的数据。
34
+
35
+ 2 . ** 数据加密** :对存储和传输中的数据进行加密,以保护敏感信息不被未授权访问。
36
+
37
+ 3 . ** 审计日志** :记录数据库操作的审计日志,以便在发生安全事件时进行追踪和分析。
38
+
39
+ ### 相关概念与技术
40
+
41
+ 1 . ** 数据仓库** :用于分析和报告的系统,通常整合来自多个数据源的数据,支持复杂的查询和数据分析。
42
+
43
+ 2 . ** 数据湖** :一种用于存储大量原始数据的系统,允许以多种格式存储数据,包括结构化和非结构化数据。
44
+
45
+ 3 . ** 图数据库** :专门用于存储和查询图形数据的数据库,适合处理复杂的网络关系,如社交网络和推荐系统。
46
+
47
+ 4 . ** 内存数据库** :将数据存储在内存中以实现极高的读写速度,适用于需要快速响应的应用场景。
48
+
49
+ 5 . ** 区块链** :一种去中心化的分布式账本技术,确保数据的不可篡改性和透明性,适合需要信任和验证的应用场景。
Original file line number Diff line number Diff line change
1
+ ## 数据结构
2
+
3
+ 数据结构是计算机存储、组织数据的方式。它是指相互之间存在一种或多种特定关系的数据元素的集合。
4
+ 我们常用的数据结构有:数组、链表、栈、队列、树、图。
5
+
6
+ 在处理结构时,我们通常会使用到相关的算法,比如:排序算法、搜索算法、图算法、树算法、数组算法、链表算法。
7
+
8
+ 在区块链技术中,数据结构是其核心组成部分之一。数据结构的设计直接影响到区块链的性能、可扩展性和安全性。理解区块链中的数据结构是开发者构建和优化区块链应用的基础。
9
+
10
+ ### 区块链的数据结构
11
+
12
+ 区块链是由一系列区块(Block)按时间顺序串联而成的。每个区块包含了若干交易记录、时间戳、前一个区块的哈希值等信息。区块链的数据结构主要包括以下几个部分:
13
+
14
+ 1 . ** 区块(Block)** :
15
+ - 每个区块由多个字段组成,通常包括:
16
+ - ** 版本号** :指示区块的版本。
17
+ - ** 前区块哈希(Previous Block Hash)** :指向前一个区块的哈希值,确保区块链的不可篡改性。
18
+ - ** 时间戳(Timestamp)** :记录区块创建的时间。
19
+ - ** 默克尔树根(Merkle Root)** :通过哈希算法将区块内所有交易的哈希值汇总得到的根哈希,便于快速验证交易的完整性。
20
+ - ** 随机数(Nonce)** :用于工作量证明([ PoW] ( https://learnblockchain.cn/tags/PoW ) )机制的随机数,确保区块的生成是随机且耗费计算资源的。
21
+ - ** 交易列表(Transaction List)** :包含该区块内的所有交易信息。
22
+
23
+ 2 . ** 链(Chain)** :
24
+ - 区块通过前区块哈希相连,形成链式结构。每个新区块的生成都依赖于前一个区块的哈希值,这种设计使得一旦区块被添加到链中,就无法更改其内容。
25
+
26
+ ### 默克尔树的应用
27
+
28
+ 默克尔树( Merkle树 )是一种特殊的二叉树结构,广泛应用于区块链中以提高数据的完整性和验证效率。默克尔树的叶子节点是交易的哈希值,非叶子节点是其子节点哈希值的哈希。通过这种方式,可以在不下载整个区块的情况下,快速验证某一交易是否存在于区块中。
29
+
30
+ #### 默克尔树的优势
31
+
32
+ - ** 高效性** :只需下载根哈希和部分节点,即可验证交易的存在性。
33
+ - ** 安全性** :篡改任何交易都会导致根哈希发生变化,从而可以快速检测到数据篡改。
34
+
35
+ ### 数据结构的安全性
36
+
37
+ 区块链的数据结构设计确保了其安全性。通过哈希算法生成的区块哈希和默克尔树,任何对区块数据的修改都将导致后续所有区块的哈希值变化,从而破坏整个链的完整性。此外,工作量证明机制和其他共识算法(如权益证明)进一步增强了区块链的安全性。
38
+
39
+ ### 数据结构的扩展性
40
+
41
+ 随着区块链应用的普及,数据结构的扩展性成为一个重要问题。为了解决这一问题,开发者们提出了多种方案,如分片技术、层二解决方案(如闪电网络)等。分片技术将区块链网络分为多个子网络,每个子网络处理不同的交易,提升整体处理能力。层二解决方案则在主链之上构建额外的交易层,以减少主链的负担。
42
+
43
+ ### 相关概念
44
+
45
+ - ** 链式结构** :区块链的基本结构,确保区块的顺序和不可篡改性。
46
+ - ** 默克尔树** :用于高效验证交易完整性的树形数据结构。
47
+ - ** 工作量证明([ PoW] ( https://learnblockchain.cn/tags/PoW ) )** :一种共识机制,通过计算资源的消耗来确保网络的安全性。
48
+ - ** 权益证明([ PoS] ( https://learnblockchain.cn/tags/PoS ) )** :另一种共识机制,通过持有代币的数量和时间来决定区块的生成权。
49
+
50
+ 这些概念在区块链的生态系统中各自发挥着不同的作用,理解它们有助于开发者更好地设计和优化区块链应用。
Original file line number Diff line number Diff line change
1
+ ## 什么是 ERC777
2
+
3
+ ERC777 是一种以太坊代币标准,旨在改进 [ ERC20] ( https://learnblockchain.cn/tags/ERC20?map=EVM ) 标准,提供更灵活和安全的代币转移机制。ERC777 于 2018 年提出,主要通过引入新的功能和接口来增强代币的可用性,特别是在智能合约交互和用户体验方面。
4
+
5
+ ## ERC777 的设计目标
6
+
7
+ ### 1. 增强的兼容性
8
+
9
+ ERC777 设计的一个核心目标是与现有的 ERC20 代币标准兼容。ERC777 允许开发者在不破坏现有 ERC20 生态系统的情况下,创造出更强大的代币。用户和应用程序可以无缝地与 ERC777 代币进行交互。
10
+
11
+ ### 2. 改进的用户体验
12
+
13
+ ERC777 引入了“操作员”概念,允许用户授权其他地址(即操作员)管理其代币。这种方式简化了代币的转移过程,用户不再需要每次都调用 ` approve ` 和 ` transferFrom ` 方法。
14
+
15
+ ### 3. 安全性
16
+
17
+ ERC777 提供了一种新的转账机制,确保在代币转移过程中,接收者能够处理代币转账的逻辑,避免了 ERC20 中常见的“接收者未能处理代币”问题。
18
+
19
+ ## ERC777 的关键特性
20
+
21
+ ### 1. 操作员机制
22
+
23
+ 在 ERC777 中,用户可以指定一个或多个操作员,允许他们在不需要用户每次确认的情况下进行代币转移。这种机制使得应用程序能够更容易地管理用户资产,提升了用户体验。
24
+
25
+ ### 2. 接收者钩子(Hooks)
26
+
27
+ ERC777 引入了接收者钩子,允许接收代币的合约在接收到代币时执行自定义逻辑。这意味着当代币转移到合约时,可以自动触发特定功能,增强了合约的灵活性。
28
+
29
+ ### 3. 代币的自定义
30
+
31
+ ERC777 允许开发者为代币定义自定义的行为,如代币的发行、销毁等。这种灵活性使得 ERC777 代币能够适应多种不同的应用场景。
32
+
33
+ ### 4. 兼容性与互操作性
34
+
35
+ ERC777 代币在设计上与 ERC20 兼容,允许用户和应用程序在两者之间无缝切换。这种兼容性确保了 ERC777 代币能够在现有的以太坊生态系统中被广泛使用。
36
+
37
+ ## ERC777 的实现机制
38
+
39
+ ### 1. 代币合约的基本结构
40
+
41
+ ERC777 代币合约通常包含以下几个核心功能:
42
+
43
+ - ` send ` : 允许用户发送代币的函数。
44
+ - ` transfer ` : 用于转移代币的函数。
45
+ - ` authorizeOperator ` 和 ` revokeOperator ` : 用于管理操作员的函数。
46
+ - ` tokensReceived ` : 接收者钩子,允许合约在接收代币时执行自定义逻辑。
47
+
48
+ ### 2. 代币转移流程
49
+
50
+ 代币转移的流程如下:
51
+
52
+ 1 . 用户调用 ` send ` 函数,将代币发送给接收者。
53
+ 2 . 如果接收者是合约,合约的 ` tokensReceived ` 函数被调用,允许合约执行自定义逻辑。
54
+ 3 . 代币成功转移后,事件被触发,记录转移的详细信息。
55
+
56
+ ### 3. 安全性考虑
57
+
58
+ ERC777 的设计考虑了安全性,通过操作员机制和接收者钩子,减少了代币转移过程中可能出现的失败情况。接收者钩子确保代币只能转移到能够正确处理代币的合约中。
59
+
60
+ ## 相关概念与技术
61
+
62
+ ### 1. ERC20
63
+
64
+ ERC20 是以太坊最早的代币标准,定义了一组基本的功能和事件,使得代币能够在以太坊网络上进行交易。与 ERC777 相比,ERC20 的功能较为简单,缺乏操作员和接收者钩子的概念。
65
+
66
+ ### 2. ERC721
67
+
68
+ [ ERC721] ( https://learnblockchain.cn/tags/ERC721?map=EVM ) 是一种非同质化代币标准,专门用于表示独特的数字资产,如艺术品和收藏品。与 ERC777 和 ERC20 的同质化代币不同,ERC721 的每个代币都是独一无二的,具有不同的属性和价值。
69
+
70
+ ### 3. ERC1155
71
+
72
+ ERC1155 是一种多代币标准,允许一个合约同时管理多种代币类型,包括同质化和非同质化代币。
Original file line number Diff line number Diff line change
1
+ ## EVM 兼容链
2
+
3
+ 以太坊虚拟机([ EVM] ( https://learnblockchain.cn/tags/EVM?map=EVM ) )是以太坊网络的核心组件,负责执行智能合约并处理交易。
4
+
5
+ EVM 是一个堆栈基的虚拟机,能够执行以太坊智能合约中的字节码。智能合约是用 [ Solidity] ( https://learnblockchain.cn/tags/Solidity?map=EVM ) 或 Vyper 等编程语言编写的,经过编译后生成字节码。EVM 通过执行这些字节码来实现合约的逻辑。
6
+
7
+ 由于 以太坊生态的繁荣,许多区块链平台都实现了 EVM 兼容,EVM 兼容性指的是其他区块链平台能够支持与以太坊相同的智能合约代码和开发工具,这种兼容性使得开发者可以轻松地将其在以太坊上开发的应用程序迁移到其他支持 EVM 的区块链上,或在这些链上开发新的应用。
8
+
9
+
10
+ 常用的EVM兼容链有:
11
+ - BSC
12
+ - Polygon
13
+ - Avalanche
14
+ - Fantom
15
+ - ...
Original file line number Diff line number Diff line change
1
+ ## Yul:一种中间语言
2
+
3
+ Yul 是一种中间语言,专为以太坊智能合约的开发而设计。它旨在提供一种更高效、更灵活的方式来编写和优化智能合约代码。Yul 既可以作为 [ Solidity] ( https://learnblockchain.cn/tags/Solidity?map=[EVM](https://learnblockchain.cn/tags/EVM?map=EVM) ) 的底层语言,也可以用于直接生成以太坊虚拟机([ EVM] ( https://learnblockchain.cn/tags/EVM?map=EVM ) )字节码。Yul 的设计目标是提高智能合约的执行效率和可读性,同时保持与 [ EVM] ( https://learnblockchain.cn/tags/EVM?map=EVM ) 的兼容性。
4
+
5
+ ### Yul 的背景与发展
6
+
7
+ Yul 的出现是为了应对 Solidity 在某些特定场景下的局限性。虽然 Solidity 是以太坊上最流行的智能合约编程语言,但它在性能优化和底层控制方面存在一定的不足。Yul 作为一种中间语言,能够让开发者更接近硬件层面,从而实现更高效的代码。
8
+
9
+ Yul 的设计灵感来源于 LLVM(低级虚拟机)项目。LLVM 提供了一种中间表示(IR),可以用于多种编程语言的编译。Yul 的目标是类似的:作为一种通用的中间语言,支持不同的编程语言(如 Solidity 和 Vyper)生成高效的 EVM 字节码。
10
+
11
+ ### Yul 的语法与结构
12
+
13
+ Yul 的语法相对简洁,设计上注重可读性和可维护性。它使用类似于 Solidity 的语法结构,但省略了一些复杂的特性,以减少学习曲线。Yul 的基本结构包括:
14
+
15
+ - ** 变量声明** :支持基本数据类型,如整数、布尔值和地址。
16
+ - ** 控制流** :提供条件语句(if-else)和循环(for、while)等基本控制结构。
17
+ - ** 函数定义** :支持函数的定义和调用,允许参数传递和返回值。
18
+ - ** 内存管理** :Yul 提供了对内存的直接控制,允许开发者手动管理内存分配和释放。
19
+
20
+ Yul 的代码通常以 ` .yul ` 文件扩展名保存,并可以通过编译器转换为 EVM 字节码。
21
+
22
+ ### Yul 的优化机制
23
+
24
+ Yul 的一个重要特点是其优化机制。通过使用 Yul,开发者可以更容易地进行代码优化,以提高智能合约的执行效率。Yul 提供了一些内置的优化工具,例如:
25
+
26
+ - ** 内联汇编** :允许开发者在 Yul 中嵌入低级汇编代码,以实现更高效的操作。
27
+ - ** 代码重用** :支持模块化编程,允许将常用功能封装为函数,从而减少代码重复。
28
+ - ** 静态分析** :Yul 提供了一些静态分析工具,帮助开发者识别潜在的性能瓶颈和安全漏洞。
29
+
30
+ ### Yul 与其他语言的比较
31
+
32
+ Yul 的设计使其与其他智能合约编程语言存在明显的区别:
33
+
34
+ - ** 与 Solidity 的比较** :Solidity 是一种高级语言,适合快速开发和原型设计,但在性能和底层控制方面有限。Yul 则提供了更高的灵活性和优化能力,适合对性能要求较高的场景。
35
+ - ** 与 Vyper 的比较** :Vyper 是一种强调安全性和可读性的语言,但在功能上较为简化。Yul 则在可读性和性能之间找到了平衡,适合需要优化的复杂合约。
36
+ - ** 与其他中间语言(如 LLVM)** :Yul 作为专为 EVM 设计的中间语言,专注于以太坊生态系统的需求,而 LLVM 则是一个通用的中间表示,支持多种编程语言和平台。
37
+
38
+ ### 相关概念
39
+
40
+ - ** Solidity** :以太坊上最流行的智能合约编程语言,提供高级抽象和丰富的功能,但在性能优化方面受限。
41
+ - ** Vyper** :一种强调安全性和可读性的智能合约语言,适合对安全性要求较高的应用。
42
+ - ** EVM(以太坊虚拟机)** :以太坊的执行环境,负责执行智能合约和处理交易。
43
+ - ** LLVM** :低级虚拟机项目,提供了一种通用的中间表示,用于多种编程语言的编译和优化。
Original file line number Diff line number Diff line change @@ -24,6 +24,8 @@ def replace_terms_in_file(file_path, terms_dict):
24
24
with open (file_path , 'r' , encoding = 'utf-8' ) as f :
25
25
lines = f .readlines ()
26
26
27
+ replaced_terms = set ()
28
+
27
29
modified_lines = []
28
30
for line in lines :
29
31
@@ -33,10 +35,18 @@ def replace_terms_in_file(file_path, terms_dict):
33
35
else :
34
36
# 对每个术语进行替换
35
37
for term , link in terms_dict .items ():
38
+
39
+ if term in replaced_terms :
40
+ continue
41
+
36
42
# 使用正则表达式确保只替换独立的词,而不是词的一部分
37
43
pattern = fr'\b{ re .escape (term )} \b'
38
44
replacement = f'[{ term } ]({ link } )'
45
+ original_line = line
46
+
39
47
line = re .sub (pattern , replacement , line )
48
+ if line != original_line : # 检查是否发生了替换
49
+ replaced_terms .add (term )
40
50
41
51
modified_lines .append (line )
42
52
You can’t perform that action at this time.
0 commit comments