Skip to content

Commit

Permalink
modify some bitcoin description
Browse files Browse the repository at this point in the history
  • Loading branch information
xilibi2003 committed Jun 29, 2024
1 parent bee7111 commit 9294b73
Show file tree
Hide file tree
Showing 13 changed files with 135 additions and 269 deletions.
43 changes: 28 additions & 15 deletions basic/共识/共识.md
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是一种基于反馈机制的共识算法,旨在提供快速的最终性和高度的可扩展性。节点根据其他节点的反馈来投票选择下一个区块,这种反馈机制帮助网络快速达成共识。

>这些共识算法各有特点,适用于不同的区块链项目和应用场景。它们的设计考虑了安全性、吞吐量、延迟和可扩展性等因素,以满足不同需求下的共识需求。随着区块链技术的不断发展,可能会出现更多创新的共识算法。
18 changes: 8 additions & 10 deletions basic/基础概念/区块链浏览器.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
# 区块链浏览器
## 区块链浏览器

## 介绍
区块链的所有数据都是开放的,但不是每个人都能写代码去查看链上的交易,大家需要通过一个窗口来查看交易数据。这个窗口就是**区块链浏览器**

对于区块链,所有的数据都是开放的,但不是每个人都能写代码去查看链上的交易,大多数人会通过一个公开的窗口来查看数据。这个公开的窗口就是**区块链浏览器**

区块链所有信息往往会包括:ChainInfo、BlockInfo、 TransactionInfo 、ContractInfo(TokenInfo、Scriptinfo) 、AddressInfo 等等,这也基本构成了区块链浏览器产品的产品架构。
区块链浏览器信息往往会包括:ChainInfo、BlockInfo、 TransactionInfo 、ContractInfo(TokenInfo、Scriptinfo) 、AddressInfo 等等。

### ChainInfo

Expand All @@ -15,15 +13,15 @@ ChainInfo 一般是该区块链的总体性概述,一般放置于浏览器页
* **安全指标:**算力、计算难度、挖矿收益、算力集中度等
* **繁荣指标**:交易数量、交易池、活跃账户、合约与token等
* **价格指标**:市场价格、市值等
* **特色指标**譬如比特币体系下的 Script,EOS 体系下的 Ram/超级节点,Cosmos 体系下的 staking ,Nervos 体系下的 Cell 信息等
* **特色指标**: POS 共识下的 staking ,Nervos 体系下的 Cell 信息等

### BlockInfo

BlockInfo 是指区块链的区块维度信息,一般会包括区块列表页、区块详情页。在这里就涉及到区块链的数据结构的问题。我们可以看下比特币的 Block 数据结构:比特币的数据结构往往由以下的一些数据组成,产品经理要做的往往是确定信息的优先级并进行有序排列即可。通过这种方式,我们可以基本地勾画出 BlockInfo 的基本信息。

![v2-c5c0d96f375f686ed04667c716ba6f39_720w](/graph/v2-c5c0d96f375f686ed04667c716ba6f39_720w.png)
![ ](../../graph/v2-c5c0d96f375f686ed04667c716ba6f39_720w.png)

![v2-2ef780c576a7e0d4de859d19e8de6aba_720w](/graph/v2-2ef780c576a7e0d4de859d19e8de6aba_720w.webp)
![ ](../../graph/v2-2ef780c576a7e0d4de859d19e8de6aba_720w.webp)

但是这显然是不够的。BlockInfo 还有大量信息可以挖掘,这些信息充满了该区块链的特点,我们以比特币举例:

Expand All @@ -46,11 +44,11 @@ AddressInfo 主要聚焦于给使用者一个”账户”概念,在比特币

### 比特币浏览器

https://btc.com/stats
https://btc.com/

### 以太坊浏览器

https://etherscan.io/charts
https://etherscan.io/

***

Expand Down
2 changes: 1 addition & 1 deletion bitcoin/二层扩容/扩容技术/Statechain.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Alice也还保留着这边临时密钥。但是,如果她想要Victor帮忙签

Alice和Bob(以及后续所有获得了临时密钥的人)使用一个为闪电网络设计的密码学方法,叫做 “**Eltoo**”。Eltoo 使得Bob可以用自己的备份交易 “**覆盖**”Alice的备份交易。所以,如果Alice尝试欺诈,把自己的旧备份交易广播出去,Bob 既可以在 Alice 的等待期里与Victor联系,联手拿回自己的钱;也可以使用自己的备份交易直接覆盖掉 Alice 的交易。

![statechain](/graph/statechain.png)
![statechain](../../../graph/statechain.png)

***

Expand Down
44 changes: 22 additions & 22 deletions bitcoin/分叉/比特币分叉.md
Original file line number Diff line number Diff line change
@@ -1,42 +1,42 @@
# 比特币分叉
## 比特币分叉

## 什么是分叉?
比特币分叉(Bitcoin Fork)是指比特币区块链的分裂,产生了不同版本的区块链和相应的加密货币。分叉主要分为硬分叉(Hard Fork)和软分叉(Soft Fork)两种类型。分叉通常是由于社区对协议升级或变更的意见不一致而导致的。

***
### 硬分叉

由于协议规则的变化或更新,区块链分裂成两个独立的分支。指向同一个父块的2个区块被同时生成。某些部分的矿工看到其中一个区块,其他的矿工则看到另外一个区块,这导致2种区块链同时增长。分叉又分为软分叉和硬分叉
硬分叉是指对区块链协议进行不兼容的升级,这意味着新版本的节点无法与旧版本的节点兼容(旧节点不接受新版本的区块)。硬分叉会导致区块链分裂成两个独立的链,产生两个不同的加密货币

### 软分叉

软分叉大体分为两种:

1.**旧节点接受新区块,新节点也接受旧区块。**
经典硬分叉实例:

2.**旧节点接受新区块,新节点不接受旧区块。**
**比特币现金(Bitcoin Cash, BCH)**:比特币社区在扩展区块大小和交易处理速度方面存在分歧。支持者希望通过增加区块大小(从1MB到8MB)来提高交易吞吐量。

对于第一种来说,这种情况并不会导致分叉,因为这种升级并没有改变区块的格式。P2SH的升级就是这一类
**比特币黄金(Bitcoin Gold, BTG)**:为了使挖矿更加去中心化,比特币黄金采用了新的挖矿算法(Equihash),使普通用户可以使用GPU进行挖矿,避免ASIC矿机的垄断

对于第二种来说,我们又要分两种情况讨论:
**比特币 SV(Bitcoin SV, BSV)**:比特币现金社区内部关于协议升级和愿景的分歧导致的分叉

* 如果新节点的算力超过50%,这个时候虽然旧节点会在新区块上挖矿,但是由于新节点不接受旧区块,导致新节点不会在旧区块上挖矿。再加上新节点的算力较大,那么最终最长链一定是由新区块组成的链。而且,这条最长链是双方都认为合法的一条。旧节点在这个时候,出于自身利益的考虑,也会升级成新节点——这就是软分叉的最好结果。
* 如果新节点的的算力不足50%,这个时候由于新节点不会在旧区块上挖矿,所以即便新节点先挖出了几块矿,但是后面肯定会全都是旧区块。然后,新节点会认为只有新节点的才是合法的,而旧节点虽然认为两条都合法,但是新区块的那条算力不足导致不是最长链,所以它仍旧会选择原来那条。

### 硬分叉

硬分叉则为:**旧节点不接受新区块**
### 软分叉

这里我们还是分两种情况讨论:
软分叉是指对区块链协议进行向后兼容的升级,这意味着新旧版本的节点可以共存,并且旧节点仍然可以验证新的区块和交易。软分叉通常用于改进网络功能或增加新特性,而不需要所有参与者都立即升级。

* 如果新节点的算力超过50%,那么无论新节点能不能接受旧区块,链都会自然分为两条,一条只有旧区块,一条只有新区块。新节点不能接受新区块这种情况很好理解,即便算力不超过50%,也会分成两条链,无非是一边用户多,一边用户少而已。新节点能接受旧区块时,新节点虽然接受有旧区块的链,但是因为只要有了新区块旧节点就不会在上面挖矿,所以最终会还是会分成两条链,一条只有旧区块,一条只有新区块。
* 如果新节点的算力不超过50%,对于新节点不能接受旧区块的情况,结果和上面的分析一样会分裂成两条链。而对于新节点接受旧区块的情况,这与第二种软分叉的第一种情况正好相反,也就是升级失败。此时最长链为旧区块为主导,新节点失去了话语权。

值得注意的是,硬分叉不等于分裂!因为硬分叉只代表新旧节点会分成两条链,但是不代表两方的节点永远分道扬镳。双方仍旧可以放弃自己的阵营加入对方,只不过其中的一条链会被废弃,这些区块会变成孤块。这并不可怕,这种暂时性的分叉在比特币的世界几乎每天都在发生。

## 分叉的历史
常见的软分叉实例:

**隔离见证** 通过将签名数据从区块中分离出来,增加了每个区块的实际容量,从而提高交易处理速度和效率, 更多参考: [隔离见证 - 百科](https://learnblockchain.cn/tags/%E9%9A%94%E7%A6%BB%E8%A7%81%E8%AF%81)

**Taproot** 旨在提高比特币的隐私性、效率和智能合约功能。它引入了Schnorr签名和MAST(Merkelized Abstract Syntax Tree)等技术。更多参考: [Taproot - 百科](https://learnblockchain.cn/tags/Taproot)



### 比特币历史分叉图


***

![分叉历史](/graph/%E5%88%86%E5%8F%89%E5%8E%86%E5%8F%B2.png)
![分叉历史](../../graph/%E5%88%86%E5%8F%89%E5%8E%86%E5%8F%B2.png)

### BTC、BCH、BSV的诞生始末

Expand Down Expand Up @@ -66,7 +66,7 @@

从分叉前最后一周的出块数据来看,84.2%的区块由BCHN社区挖出,由BCHA挖出的占0%。BCHN阵营对比BCHABC阵营在算力上占绝对优势。

![饼图](/graph/%E9%A5%BC%E5%9B%BE.png)
![饼图](../../graph/%E9%A5%BC%E5%9B%BE.png)

最终,于2020年11月15日,BCH正式硬分叉为BCHA和BCHN。其中BCHN以绝对的优势胜出,并延续了BCH的基因。

Expand Down
2 changes: 1 addition & 1 deletion bitcoin/协议/RGB.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ RGB实际上就是将**链下资产的发行**与**链上的UTXO变更**做一
5. 在比特币网络上,Pam 得币这件事对应着一个新的UTXO C,表示着Pam当前目前持有比特币UTXO;
6. 同理,当 Pam 转币时,他原有的UTXO C也会被销毁,进而形成一个新的UTXO D...

![RGB](/graph/RGB.png)
![RGB](../../graph/RGB.png)

如果这个$MATT币一直在不同人手里转下去,最终在比特币主网上会有与这些转账所对应的UTXO来进行标识,并且每次当下发生的转账,都会使得原来的UTXO被销毁,而产生新的UTXO。

Expand Down
8 changes: 3 additions & 5 deletions bitcoin/基础概念/Taproot.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
# Taproot

## 介绍
## Taproot

Taproot是比特币网络的一次升级,于2021年11月14日上线。自SegWit(隔离见证)问世以来,Taproot与Schnorr签名一直是备受期待的比特币技术升级。Taproot旨在改变比特币脚本的运作方式,提升私密性、可扩展性与安全性。Taproot与名为Schnorr签名的相关升级结合后,将有望实现上述目标及更多计划。

Expand All @@ -10,13 +8,13 @@ Taproot是一次优化比特币脚本的软分叉,提升私密性、效率以

在不可能三角中,Taproot升级主要应对了两个方面。一个是进一步提高匿名性能力,也就是进一步提升安全性;另一个是期望通过改变区块本身的数据结构来提升交易性能,减少交易中不必要的数据负担。

![不可能三角](../graph/%E4%B8%8D%E5%8F%AF%E8%83%BD%E4%B8%89%E8%A7%92.png)
![不可能三角](../../graph/%E4%B8%8D%E5%8F%AF%E8%83%BD%E4%B8%89%E8%A7%92.png)

Taproot升级由3项不同的比特币改进提案(BIP)组成,其中包括:**Taproot****Tapscript**及其核心,即名为“**Schnorr签名**”的全新数字签名方案。Taproot旨在为比特币用户带来诸多好处,例如**提升交易私密性和降低交易费用**。还将让比特币执行更多复杂的交易,从而拓宽用例,与以太坊一较高下,尤其是智能合约功能和网络对[去中心化金融(DeFi)](https://academy.binance.com/en/glossary/defi)[非同质化代币(NFT)](https://academy.binance.com/en/glossary/non-fungible-token-nft)的支持。

Taproot提案最初由Bitcoin Core开发者Greg Maxwell在2018年1月提出。2020年10月,Pieter Wuille创建代码拉取请求,将Taproot并入Bitcoin Core代码库。为了全面部署升级,节点运行者须采用Taproot的全新共识规则。该提案最终得到90%的矿工支持,并于**2021年11月14日在区块709,632中正式激活**

## Taproot如何运作
### Taproot 如何运作

### Schnorr签名(BIP340)

Expand Down
22 changes: 10 additions & 12 deletions bitcoin/基础概念/UTXO.md
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)
Loading

0 comments on commit 9294b73

Please sign in to comment.