Skip to content

Commit

Permalink
Update JacksonStack.md
Browse files Browse the repository at this point in the history
  • Loading branch information
JacksonStack authored Mar 10, 2025
1 parent e22fab3 commit bfd9bc9
Showing 1 changed file with 21 additions and 15 deletions.
36 changes: 21 additions & 15 deletions JacksonStack.md
Original file line number Diff line number Diff line change
Expand Up @@ -170,50 +170,56 @@ start
区块链中所谓的账本,其作用和现实生活中的账本基本一致,按照一定的格式记录流水等交易信息。特别是在各种数字货币中,交易内容就是各种转账信息。
随着区块链的发展,记录的交易内容由各种转账记录扩展至各个领域的数据。比如,在供应链溯源应用中,区块中记录了供应链各个环节中物品所处的责任方、位置等信息。
区块是链式结构的基本数据单元,聚合了所有交易相关信息,主要包含区块头和区块主体两部分。区块头主要由父区块哈希值(Previous Hash)、时间戳(Timestamp)、默克尔树根(Merkle TreeRoot)等信息构成;区块主体一般包含一串交易的列表。每个区块中的区块头所保存的父区块的哈希值,便唯一地指定了该区块的父区块,在区块间构成了连接关系,从而组成了区块链的基本数据结构。
区块链的基础技术主要包括: 哈希运算、数字签名、P2P网络、共识算法以及智能合约等
### **去中心化-P2P网络**
区块链的基础技术主要包括: 哈希运算、数字签名、P2P网络、共识算法以及智能合约等

**去中心化-P2P网络**
与中心化的系统不同,其中单个实体具有控制权,在区块链中,网络上的每个参与者(节点/计算机)都可以访问整个数据库和完整的交易历史记录。每个人都可以直接验证其交易合作伙伴的记录,而无需中介。
对等计算机网络(Peer-to-Peer Networking,P2P网络),是一种消除了中心化的服务节点,将所有的网络参与者视为对等者(Peer),并在他们之间进行任务和工作负载分配。
- P2P 结构打破了传统的 C/S模式 ,去除了中心服务器,是一种依靠用户群共同维护的网络结构。由于节点间的数据传输不再依赖中心服务节点, P2P 网络具有极强的可靠性,任何单一或者少量节点故障都不会影响整个网络正常运转。
- 同时, P2P 网络的网络容量没有上限,因为随着节点数量的增加,整个网络的资源也在同步增加。由于每个节点可以从任意(有能力的)节点处得到服务,同时由于 P2P 网络中暗含的激励机制也会尽力向其他节点提供服务,因此,实际上 P2P 网络中节点数目越多, P2P 网络提供的服务质量就越高。
数字签名

**数字签名**
在密码学领域,一套数字签名算法一般包含签名和验签两种运算,数据经过签名后,非常容易验证完整性,并且不可抵赖。只需要使用配套的验签方法验证即可,不必像传统物理签名一样需要专业手段鉴别。
数字签名通常采用非对称加密算法,即每个节点需要一对私钥、公钥密钥对。所谓私钥即只有本人可以拥有的密钥,签名时需要使用私钥。不同的私钥对同一段数据的签名是完全不同的,类似物理签名的字迹。
数字签名一般作为额外信息附加在原消息中,以此证明消息发送者的身份。
公钥即所有人都可以获取的密钥,验签时需要使用公钥。因为公钥人人可以获取,所以所有节点均可以校验身份的合法性。
**共识算法**
公钥即所有人都可以获取的密钥,验签时需要使用公钥。因为公钥人人可以获取,所以所有节点均可以校验身份的合法性。
**共识算法**
用于在分布式进程或系统之间达成关于单个数据值的协议的技术。区块链使用诸如工作证明和权益证明之类的共识模型来同意交易的有效性。
当前区块链系统的共识算法有许多种,主要可以归类为如下四大类:
- **工作量证明(Proof of Work, PoW)类的共识算法**
PoW 类的共识算法主要包括区块链鼻祖比特币所采用的 PoW 共识及一些类似项目(如莱特币等)的变种 PoW。这类共识算法的核心思想实际是所有节点竞争记账权,而对于每一批次的记账(或者说,挖出一个区块)都赋予一个 难题,要求只有能够解出这个难题的节点挖出的区块才是有效的。同时,所有节点都不断地通过试图解决难题来产生自己的区块并将自己的区块追加在现有的区块链之后,但全网络中只有最长的链才被认为是合法且正确的。
比特币类区块链系统采取这种共识算法的巧妙之处在于两点:
- 首先,它采用的 难题 具有难以解答,但很容易验证答案的正确性的特点,同时这些难题的 难度,或者说全网节点平均解出一个难题所消耗时间,是可以很方便地通过调整难题中的部分参数来进行控制的,因此它可以很好地控制链增长的速度。
- 同时,通过控制区块链的增长速度,它还保证了若有一个节点成功解决难题完成了出块,该区块能够以(与其他节点解决难题速度相比)更快的速度在全部节点之间传播,并且得到其他节点的验证的特性;这个特性再结合它所采取的 最长链有效 的评判机制,就能够在大多数节点都是诚实(正常记账出块,认同最长链有效)的情况下,避免恶意节点对区块链的控制。这是因为,在诚实节点占据了全网 50% 以上的算力比例时,从期望上讲,当前最长链的下一个区块很大概率也是诚实节点生成的,并且该诚实节点一旦解决了 难题 并生成了区块,就会在很快的时间内告知全网其他节点,而全网的其他节点在验证完毕该区块后,便会基于该区块继续解下一个难题以生成后续的区块,这样以来,恶意节点很难完全掌控区块的后续生成。
- **工作量证明(Proof of Work, PoW)类的共识算法**
PoW 类的共识算法主要包括区块链鼻祖比特币所采用的 PoW 共识及一些类似项目(如莱特币等)的变种 PoW。这类共识算法的核心思想实际是所有节点竞争记账权,而对于每一批次的记账(或者说,挖出一个区块)都赋予一个 难题,要求只有能够解出这个难题的节点挖出的区块才是有效的。同时,所有节点都不断地通过试图解决难题来产生自己的区块并将自己的区块追加在现有的区块链之后,但全网络中只有最长的链才被认为是合法且正确的。
比特币类区块链系统采取这种共识算法的巧妙之处在于两点:
- 首先,它采用的 难题 具有难以解答,但很容易验证答案的正确性的特点,同时这些难题的 难度,或者说全网节点平均解出一个难题所消耗时间,是可以很方便地通过调整难题中的部分参数来进行控制的,因此它可以很好地控制链增长的速度。
- 同时,通过控制区块链的增长速度,它还保证了若有一个节点成功解决难题完成了出块,该区块能够以(与其他节点解决难题速度相比)更快的速度在全部节点之间传播,并且得到其他节点的验证的特性;这个特性再结合它所采取的 最长链有效 的评判机制,就能够在大多数节点都是诚实(正常记账出块,认同最长链有效)的情况下,避免恶意节点对区块链的控制。这是因为,在诚实节点占据了全网 50% 以上的算力比例时,从期望上讲,当前最长链的下一个区块很大概率也是诚实节点生成的,并且该诚实节点一旦解决了 难题 并生成了区块,就会在很快的时间内告知全网其他节点,而全网的其他节点在验证完毕该区块后,便会基于该区块继续解下一个难题以生成后续的区块,这样以来,恶意节点很难完全掌控区块的后续生成。

PoW类的共识算法所设计的 难题 一般都是需要节点通过进行大量的计算才能够解答的,为了保证节点愿意进行如此多的计算从而延续区块链的生长,这类系统都会给每个有效区块的生成者以一定的奖励。比特币中解决的难题即寻找一个符合要求的随机数。PoW 类算法给参与节点带来的计算开销,除了延续区块链生长外无任何其他意义,却需要耗费巨大的能源,并且该开销会随着参与的节点数目的上升而上升,是对能源的巨大浪费。
- **Po*的凭证类共识算法**
- **Po*的凭证类共识算法**
这类算法引入了 凭证 的概念(即 Po* 中的 * ,代表各种算法所引入的凭证类型):根据每个节点的某些属性(拥有的币数、持币时间、可贡献的计算资源、声誉等),定义每个节点进行出块的难度或优先级,并且取凭证排序最优的节点,或是取凭证最高的小部分节点进行加权随机抽取某一节点,进行下一段时间的记账出块。
这种类型的共识算法在一定程度上降低了整体的出块开销,同时能够有选择地分配出块资源,即可根据应用场景选择 凭证 的获取来源,是一个较大的改进。
然而,凭证的引入提高了算法的中心化程度,一定程度上有悖于区块链 去中心化 的思想,且多数该类型的算法都未经过大规模的正确性验证实验,部分该类算法的矿工激励不够明确,节点缺乏参与该类共识的动力。

- **拜占庭容错(Byzantine Fault Tolerance, BFT)类算法**
- **拜占庭容错(Byzantine Fault Tolerance, BFT)类算法**
无论是 PoW 类算法还是 Po* 类算法,其中心思想都是将所有节点视作竞争对手,每个节点都需要进行一些计算或提供一些凭证来竞争出块的权利(以获取相应的出块好处)。BFT 类算法则采取了不同的思路,它希望所有节点协同工作,通过协商的方式来产生能被所有(诚实)节点认可的区块。
具体地,BFT 类共识算法一般都会定期选出一个领导者,由领导者来接收并排序区块链系统中的交易,领导者产生区块并递交给所有其他节点对区块进行验证,进而其他节点“举手”表决时接受或拒绝该领导者的提议。如果大部分节点认为当前领导者存在问题,这些节点也可以通过多轮的投票协商过程将现有领导者推翻,再以某种预先定好的协议协商产生出新的领导者节点。
BFT 类算法一般都有完备的安全性证明,能在算法流程上保证在群体中恶意节点数量不超过三分之一时,诚实节点的账本保持一致。然而,这类算法的协商轮次也很多,协商的通信开销也比较大,导致这类算法普遍不适用于节点数目较大的系统。业界普遍认为,BFT 算法所能承受的最大节点数目不超过100。
- **结合可信执行环境的共识算法**
BFT 类算法一般都有完备的安全性证明,能在算法流程上保证在群体中恶意节点数量不超过三分之一时,诚实节点的账本保持一致。然而,这类算法的协商轮次也很多,协商的通信开销也比较大,导致这类算法普遍不适用于节点数目较大的系统。业界普遍认为,BFT 算法所能承受的最大节点数目不超过100。

- **结合可信执行环境的共识算法**
上述三类共识算法均为纯软件的共识算法。除此之外,还有一些共识算法对硬件进行了利用,如一些利用可信执行环境(Trusted Execution Environment, TEE)的软硬件结合的共识算法。
可信执行环境是一类能够保证在该类环境中执行的操作绝对安全可信、无法被外界干预修改的运行环境,它与设备上的普通操作系统(Rich OS)并存,并且能给Rich OS提供安全服务。
可信执行环境所能够访问的软硬件资源是与Rich OS完全分离的,从而保证了可信执行环境的安全性。利用可信执行环境,可以对区块链系统中参与共识的节点进行限制,很大程度上可以消除恶意节点的不规范或恶意操作,从而能够减少共识算法在设计时需要考虑的异常场景,一般来说能够大幅提升共识算法的性能。

**智能合约**
智能合约是一种在满足一定条件时,就自动执行的计算机程序。 智能合约,不仅仅是将传统的合约电子化,它的真正意义在革命性地将传统合约的背书执行由法律替换成了代码。
智能合约一旦在区块链上部署,所有参与节点都会严格按照既定逻辑执行。基于区块链上大部分节点都是诚实的基本原则,如果某个节点修改了智能合约逻辑,那么执行结果就无法通过其他节点的校验而不会被承认,即修改无效。
一个基于区块链的智能合约需要包括事务处理机制、数据存储机制以及完备的状态机,用于接收和处理各种条件。并且事务的触发、处理及数据保存都必须在链上进行。当满足触发条件后,智能合约即会根据预设逻辑,读取相应数据并进行计算,最后将计算结果永久保存在链式结构中。

潜在应用
区块链潜在应用
- **供应链和物流:** 监控商品在供应链中的移动和转手。
- **房地产:** 减少房地产销售中的欺诈并简化房地产销售过程。
- **投票:** 创建一个不可变和透明的系统,其中投票不能被更改。
- **身份验证:** 为用户提供一种安全、去中心化的身份验证方法。
- **医疗保健:** 安全地存储医疗记录并仅与授权个人共享。

挑战:
- **可扩展性:** 当前的主要系统面临着扩展和快速处理大量交易的问题。
- **网络规模:** 当网络的规模较小时,区块链更加安全。但是,如果网络规模较小,它更容易受到攻击。
Expand Down

0 comments on commit bfd9bc9

Please sign in to comment.