-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
bee7111
commit 9294b73
Showing
13 changed files
with
135 additions
and
269 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 |
---|---|---|
@@ -1,42 +1,55 @@ | ||
# 什么是共识算法 | ||
## 共识 | ||
|
||
## 定义 | ||
共识机制是区块链网络中用来确保所有节点对数据的一致性达成共识的协议。它是区块链技术的核心组件,确保分布式系统中的所有参与者都能就网络状态达成一致,并且保证数据的安全和可靠性。 | ||
|
||
区块链共识算法是一种用于解决分布式系统中节点之间达成一致意见的机制。在区块链网络中,不同节点可能拥有不同的数据和状态,因此需要一种算法来确保所有节点就交易的有效性、区块的顺序以及网络的状态达成一致。共识算法的目标是解决分布式环境下可能出现的数据不一致、恶意行为和双重支付等问题。 | ||
|
||
# 常见的区块链共识算法: | ||
|
||
## 1. **工作量证明(Proof of Work,PoW)**: | ||
区块链共识算法是一种用于解决分布式系统中节点之间达成一致意见的机制。在区块链网络中,不同节点可能拥有不同的数据和状态,因此需要一种机制来确保所有节点就交易的有效性、区块的顺序以及网络的状态达成一致。共识机制的目标是解决分布式环境下可能出现的数据不一致、恶意行为和双重支付等问题。 | ||
|
||
## 常见的共识机制: | ||
|
||
### 1. **工作量证明(Proof of Work,PoW)**: | ||
|
||
这是比特币最早使用的共识算法。在[PoW](https://learnblockchain.cn/tags/PoW)中,节点(矿工)需要通过解决一个复杂的数学难题来竞争获得添加下一个区块的权利。第一个解出问题的节点可以添加区块,并获得一定数量的奖励。由于解题过程需要大量计算资源,PoW算法被认为是能源消耗较大的算法。 | ||
|
||
## 2. **权益证明(Proof of Stake,PoS)**: | ||
### 2. **权益证明(Proof of Stake,PoS)**: | ||
|
||
在[PoS](https://learnblockchain.cn/tags/PoS)中,节点的权益(通常是持有的加密货币数量)决定了他们被选中添加下一个区块的概率。这减少了能源消耗,因为没有解题过程,但也引入了一些新的问题,如"悔矿"问题,即持有者可能更有动机保护网络的稳定性,而不是支持新的变化。 | ||
|
||
## 3. **权威证明(Proof of Authority,PoA)**: | ||
### 3. **权威证明(Proof of Authority,PoA)**: | ||
|
||
在PoA中,网络中的权威节点(通常是已知实体或经过验证的实体)获得添加区块的权限。这种方法适用于私有链或联盟链,其中信任性更高,但不适用于公有链,因为它违背了去中心化的原则。 | ||
|
||
## 4. **权益证明+工作量证明(Delegated Proof of Stake,DPoS)**: | ||
### 4. **权益证明+工作量证明(Delegated Proof of Stake,DPoS)**: | ||
|
||
[DPoS](https://learnblockchain.cn/tags/DPoS) 引入了代表制度,持币人可以投票选出一些节点作为“代表”来验证交易和添加区块。代表的数量通常较少,这减少了共识过程的复杂性,但也引入了中心化的潜在问题。 | ||
|
||
## 5. **权益证明+权威证明(Proof of Elapsed Time,PoET)**: | ||
### 5. **权益证明+权威证明(Proof of Elapsed Time,PoET)**: | ||
|
||
PoET是一种以身份验证为基础的共识算法,节点通过等待随机时间来获得添加区块的权利。这个等待时间是由一个可信的随机时间模块分配的。 | ||
|
||
## 6. **哈希时钟(Hashgraph)**: | ||
### 6. **哈希时钟(Hashgraph)**: | ||
|
||
哈希时钟是一种基于事件流的共识算法,它使用一种称为“虚拟异步”的通信模型来实现高效的共识。节点按照一种链式结构记录事件,并通过对事件的哈希计算来创建一个“哈希时钟”。这个算法旨在提供快速的最终性,即一旦事件被添加到哈希时钟中,它就被视为不可更改。 | ||
|
||
## 7. **拜占庭容错(Byzantine Fault Tolerance,BFT)**: | ||
### 7. **拜占庭容错(Byzantine Fault Tolerance,BFT)**: | ||
|
||
拜占庭容错是一组共识算法,用于解决分布式系统中的拜占庭将军问题。在这个问题中,一些节点可能是恶意的,它们可能发送虚假的信息以干扰共识过程。BFT算法通过允许节点在一定数量的恶意节点存在的情况下仍然达成一致,保证了系统的安全性。 | ||
|
||
## 8. **HoneyBadgerBFT**: | ||
### 8. **HoneyBadgerBFT**: | ||
|
||
HoneyBadgerBFT是一种异步拜占庭容错算法,它通过使用密码学原语和广播协议来实现安全的共识。它的设计旨在提供高吞吐量和低延迟,适用于需要高性能和强安全性的应用场景。 | ||
|
||
## 9. **Ripple Protocol Consensus Algorithm(RPCA)**: | ||
### 9. **Ripple Protocol Consensus Algorithm(RPCA)**: | ||
|
||
Ripple是一种基于联盟链的支付协议,它使用一种独特的共识算法来确认交易。RPCA基于特定的一致性规则,节点通过选择最有可能被其他节点选中的交易来达成共识。 | ||
|
||
## 10. **Algorand**: | ||
### 10. **Algorand**: | ||
|
||
Algorand是一种采用权益证明(PoS)的共识算法,其独特之处在于,它每个区块只包含一个交易。节点在一个分层的共识过程中轮流参与,以选择下一个区块的提议者和验证者,从而实现高效且安全的共识。 | ||
|
||
## 11. **Avalanche**: | ||
### 11. **Avalanche**: | ||
|
||
Avalanche是一种基于反馈机制的共识算法,旨在提供快速的最终性和高度的可扩展性。节点根据其他节点的反馈来投票选择下一个区块,这种反馈机制帮助网络快速达成共识。 | ||
|
||
>这些共识算法各有特点,适用于不同的区块链项目和应用场景。它们的设计考虑了安全性、吞吐量、延迟和可扩展性等因素,以满足不同需求下的共识需求。随着区块链技术的不断发展,可能会出现更多创新的共识算法。 |
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
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
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
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
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
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 |
---|---|---|
@@ -1,23 +1,21 @@ | ||
# UTXO | ||
## UTXO : 未花费的交易输出 | ||
|
||
## 介绍 | ||
UTXO 未花费的交易输出(Unspent Transaction Output ),是比特币和其他基于比特币的加密货币系统中管理账户余额的一种机制。它记录了每个交易输出的状态,以追踪每个比特币的所有权。 | ||
|
||
*** | ||
在UTXO模型中,比特币交易是通过消耗(花费)之前的UTXO并创建新的UTXO来进行的。每个UTXO代表一笔未被花费的比特币金额,直到它被新的交易消耗为止。 | ||
|
||
未花费的交易输出(Unspent Transaction Output/UTXO),它是中本聪最早在比特币中采用的一个具体技术方案。未花费的交易输出是比特币交易中的基本概念,当我们要计算用户的剩余资产时,我们需要通过计算UTXO来得到。 | ||
当我们要计算地址余额时,是通过所有 UTXO 得到。UTXO都会**作为一个整体被消耗**(不可分割性),交易剩余的金额需要“**找零**“。 | ||
|
||
**花费与未花费**的概念:举个简单的例子,你手上有一笔现金,未花费就说明现金属于你,花费了就说明现金不属于你。在比特币世界中,如果你有一笔未花费的交易输出,那么它就是你的资产。 | ||
|
||
> 在交易过程中,对方向你转账,我们把转入到对应地址的过程称为交易输出,如果你没花费转入的金额,那么说明这个交易输出未花费,仍旧是你的资产。 | ||
|
||
一个UTXO可以是1“**聪**”(satoshi)的任意整数倍。(1 BTC=1亿聪) | ||
[比特币交易](https://learnblockchain.cn/tags/比特币交易)的构成由**输入(Inputs)** 和 **输出(Outputs)** 构成: | ||
|
||
值得注意的是,当你把未花费的交易输出进行花费时,不论这笔交易输出是否超过了所需的金额,UTXO都会**作为一个整体被消耗**。UTXO具有不可分割性,溢出的金额会被“**找零**”,重新回到你的账户下,并且存放在一个新的地址。 | ||
1. **输入(Inputs)**:指向之前交易的UTXO。每个输入都引用一个特定的UTXO,并提供用于花费该UTXO的证明(通常是一个数字签名来解锁)。 | ||
2. **输出(Outputs)**:创建新的UTXO,指定接收者的地址和金额。每个输出指定了比特币的接收者和金额,并生成一个新的UTXO。 | ||
|
||
一笔比特币交易通过使用所有者的签名来解锁UTXO,并通过使用新的所有者的比特币地址来锁定并创建UTXO。 | ||
|
||
## 与UTXO相关知识 | ||
|
||
*** | ||
一个UTXO可以是1“**聪**”(satoshi,1 BTC=1亿聪 )的任意整数倍。 | ||
|
||
|
||
|
||
1.[比特币交易](比特币交易.md) |
Oops, something went wrong.